UTF-8でエンコードされた文字列を返すデバイスがあります。私はそれをバイト単位でしか読み取ることができず、読み取りは値0x00のバイトで終了します。Python - UTF-8でエンコードされた文字列をバイト単位で読み取る
他の人が私のデバイスにアクセスして文字列を返すためのPython 2.7関数を作っています。デバイスがちょうどASCIIに戻ったときに、以前の設計では
は、私はループでこれを使用:xは、デバイスから読み込まれた最新のバイト値であるx = read_next_byte()
if x == 0:
break
my_string += chr(x)
。
デバイスはUTF-8でエンコードされた文字列を返すことができますが、UTF-8でエンコードされた文字列/ユニコードに変換する方法はわかりません。
chr(x)
私はunichr(x)
を使用しても問題はないと思われますが、渡された値は完全なユニコード文字の値であると仮定していますが、0-255の部分しか持っていません。
私はデバイスから返されたバイトを、Pythonで使用できる文字列に変換しても、完全なUTF-8文字列を扱うにはどうすればよいですか?
同様に、PythonでUTF-8文字列を指定した場合、デバイスに送信してUTF-8を維持するために、個々のバイトに分割する方法を教えてください。
ファンタスティック:興味深いことに、これはtwo arg
iter
が劇的に1ラインの作業ができますPythonのイテレータにあなたのCスタイルのステートフルバイトリーダー機能を作ることによって、コードを簡素化するために使用することができ、それらの例です。それはうまくいくようです。逆を行い、bytearrayをエンコードするには、私はこの権利を使うことができますか? 'my_bytes = bytearray(my_string、 'utf-8')' そして個々のバイトを送るために 'my_bytes'をループします。 – Will@ウィル:はい。 Py3では、 'my_string.encode( 'utf-8')'(これはPythonの 'bytearray'sのように動作する' bytes'を取得します)をやや直感的に行います。しかしPy2では、 'encode'は' str'を取得します。これは文字の 'len' 1' str'を使って、 'int'sは0-255ではなく' itrates'を返します。いずれにせよ、結果を反復して書き込み関数を呼び出すことができます: 'forbearray(my_string、 'utf-8'):write_one_byte(b)' – ShadowRanger