【问题标题】:UTF-16 in Python taking 4 bytes [duplicate]Python中的UTF-16占用4个字节[重复]
【发布时间】:2018-11-18 21:43:36
【问题描述】:

我正在使用 Python-3 进行 Unicode 编码,并注意到我无法理解的行为。

以下案例按预期工作:-

x = "A"
fo = open("test.txt","w",encoding="utf_8")
fo.write(x)
fo.close()

xxd -b test.txt
00000000: 01000001(预期为 1 字节)

x = "A"
fo = open("test.txt","w",encoding="utf_16_le")
fo.write(x)
fo.close()

xxd -b test.txt
00000000: 01000001 00000000(预期为 2 个字节)

x = "A"
fo = open("test.txt","w",encoding="utf_16_be")
fo.write(x)
fo.close()

xxd -b test.txt
00000000: 00000000 01000001(预期为 2 个字节)

为什么 4 字节使用 utf_16 编码? :-

我的理解是 UTF-16 是一种可变长度的字符编码,根据字符使用 16 位或 32 位。对于字符 A,它应该只使用 16 位。有人可以帮我理解这种行为吗?

x = "A"
fo = open("test.txt","w",encoding="utf_16")
fo.write(x)
fo.close()

xxd -b test.txt
00000000: 11111111 11111110 01000001 00000000

【问题讨论】:

  • 如果在没有手动指定字节序的情况下写入,则 BOM 是必需的
  • @usr2564301,谢谢。我想,我只会得到反对票,但没有解释:)

标签: python-3.x unicode


【解决方案1】:

前两个字节是 UTF 16 字节顺序标记 (BOM)。见http://www.unicode.org/faq/utf_bom.html

【讨论】:

    猜你喜欢
    • 2015-03-13
    • 2014-01-19
    • 2018-12-16
    • 2015-09-29
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多