【发布时间】:2015-09-21 07:46:12
【问题描述】:
我从文件中加载了一个字符串。当我打印出字符串时:
print my_string
print binascii.hexlify(my_string)
我明白了:
2DF5
0032004400460035
意思是这个字符串是UTF-16。我想将此字符串转换为UTF-8,以便上面的代码产生此输出:
2DF5
32444635
我试过了:
my_string.decode('utf-8')
哪个输出:
32004400460035
编辑:
这是一个简单的示例:
hello = 'hello'.encode('utf-16')
print hello
print binascii.hexlify(hello)
hello = hello[2:].decode('utf-8')
print hello
print binascii.hexlify(hello)
产生这个输出:
��hello
fffe680065006c006c006f00
hello
680065006c006c006f00
预期的输出是:
��hello
fffe680065006c006c006f00
hello
68656c6c6f
【问题讨论】:
-
这并不是一项艰巨的任务。你尝试过什么,你在哪里卡住了?
-
另外,您有没有 BOM 的 UTF-16 数据。从前导空值来看,您有大端 UTF-16,但这可能只是部分数据?数据从何而来?
-
@MartijnPieters 更新了我的尝试。输出是从 Windows 上的程序生成的文件中加载的。
-
那么如果数据被编码为 UTF-16,你为什么要把它解码为 UTF-8?解码需要字节并产生一个
unicode对象。 -
您的输出也没有意义,因为您现在缺少
00字节。
标签: python encoding utf-8 utf-16