代わりにchr()
関数を使用してください。256 未満で 128 を超える値を送信していますが、Unicode 文字を作成しています。
次に、バイト文字を取得するために Unicode 文字を最初にエンコードする必要があります。ASCII 範囲 (0 ~ 127) 以外の値を使用しているため、そのエンコードは失敗します。
>>> str(unichr(169))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa9' in position 0: ordinal not in range(128)
これは Python 2 の通常の動作です。Unicode 文字列をバイト文字列に変換しようとすると、暗黙的なエンコードが行われる必要があり、デフォルトのエンコードは ASCII です。
代わりに使用する場合はchr()
、1 文字のバイト文字列を作成し、暗黙のエンコーディングを行う必要はありません。
>>> str(chr(169))
'\xa9'
特に255より大きい整数値を送信する必要がある場合は、 struct
moduleを調べることをお勧めします。
>>> struct.pack('!H', 1000)
'\x03\xe8'
たとえば、上記の例では、ネットワーク バイト順で整数を unsigned short にパックしています。