Unicode字节顺序标记(BOM)作为python常量?

时间:2015-10-03 11:56:27

标签: python python-3.x unicode python-unicode

这在实践中不是一个真正的问题,因为我可以写BOM = "\uFEFF";但它让我觉得我必须为这样一个基本的东西硬编码一个魔法常数。 [编辑:而且容易出错!在这个问题中,我不小心将BOM写为\uFFFE,没有人注意到。它甚至导致了一个不正确的提议解决方案。]当然python在某个地方以一种方便的形式定义它?

搜索在codecs模块中显示了一系列常量:codecs.BOMcodecs.BOM_UTF8,依此类推。但这些是bytes个对象,而不是字符串。真实物料清单在哪里?

这是针对python 3的,但我会对Python 2的完整性感兴趣。

2 个答案:

答案 0 :(得分:1)

没有。 bytes中的codecs常量是您应该使用的。

这是因为您不应该在解码文本中看到BOM(即,您不应该遇到实际编码代码点U+FEFF的字符串)。相反,BOM在流的开头存在为字节模式,当您使用BOM解码某些bytes时,U+FEFF不包括在内输出string。同样,编码过程应该处理向输出bytes添加任何必要的BOM - 它不应该在输入string中。

BOM唯一重要的是转换为bytes或从opencv_imgcodecs转换。

答案 1 :(得分:1)

我想你可以使用:

unicodedata.lookup('ZERO WIDTH NO-BREAK SPACE')

但它不像你已经拥有的那样干净