我正在尝试在python中打印unicode字符。
发生了什么:
$ python -c "print u'TEXT'" | xxd
0000000: 5445 5854 0a TEXT.
预期:
$ python -c "print u'TEXT'" | xxd
0000000: 5400 4500 5800 5400 0a T.E.X.T..
我做错了什么?请帮忙!
答案 0 :(得分:1)
Python在打印之前将Unicode字符串转换为字节。您看到的是正确的输出,例如b'T' == b'\x54'
:
$ python -c"print u'TEXT'.encode('ascii')" | xxd
0000000: 5445 5854 0a TEXT.
不要混淆Unicode字符串和以UTF-16字符编码编码的字节字符串:
$ python -c"print u'TEXT'.encode('utf-16le')" | xxd
0000000: 5400 4500 5800 5400 0a T.E.X.T..
您可以使用PYTHONIOENCODING
环境变量来更改用于编码整个脚本输出的字符编码:
$ PYTHONIOENCODING=utf-16le python -c"print u'TEXT'" | xxd
0000000: 5400 4500 5800 5400 0a T.E.X.T..