前提・実現したいこと
計測器からRS-232Cで出力された信号を、RATOCのDsub-USB変換ケーブル経由でRaspberry Pi3に読み込ませています。
RATOC社のサイトには受信した信号をUTF-8に変換させる方法が載っていたのですが、計測器のヘッダが悪さをしているのか、うまく文字コードの変換ができません。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "USB.py", line 7, in <module> line=line.decode('utf-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb7 in position 11: invalid start byte
該当のソースコード
python3
1#-*- coding: utf-8 -*- 2import serial 3ser = serial.Serial('/dev/ttyUSB0') 4line = ser.readline() #改行コード取得 5line = ser.readline() #ヘッダから改行コードまで読み込み 6ser.close() 7line=line.decode('utf-8') #文字コード変換 8print(line) 9
試したこと
line = ser.readline()
で読んだ値が(一例として)
b'S\xd4\xac+000036.6\xa0\xa0\xe7\x8d\n'
と「S\」などのヘッダを含んでいるので、replaceで余計な文字列を削除しようとしました。
#-*- coding: utf-8 -*- import serial import re ser = serial.Serial('/dev/ttyUSB0') line = ser.readline() line = ser.readline() ser.close() print(line) line=line.replace(b'S\xd4\xac+',b'') #文字列削除 print(line) line=line.decode('utf-8') print(line)
が、同様のエラーが出てしまいました。
b'S\xd4\xac+000036.6\xa0\xa0\xe7\x8d\n' #読み込んだbyteデータ b'000036.6\xa0\xa0\xe7\x8d\n' #削除後のbyteデータ Traceback (most recent call last): File "/home/pi/USB.py", line 11, in <module> line=line.decode('utf-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 8: invalid start byte
また、replace対象の先頭か最後が''だとエスケープしてしまうようで、文字のリプレイスができません。
line=line.replace(b'S\xd4\',b'') #ダイアログエラー「EOL While scanning string literal」
補足情報(FW/ツールのバージョンなど)
python3.5.2、Raspberry Pi3、REX-USB60F
(http://www.ratoc-e2estore.com/products/detail.php?product_id=35#subsub_title2)
よろしくお願いいたします。

回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/05 06:21
2019/03/05 06:28
2019/03/05 07:43