看起来Python的UTF-8编码(codecs
包)将Unicode字符28、29和30解释为换行符。为什么?我该如何防止这种情况发生?
示例代码:
with open('unicodetest.txt', 'w') as f:
f.write('a'+chr(28)+'b'+chr(29)+'c'+chr(30)+'d'+chr(31)+'e')
with open('unicodetest.txt', 'r') as f:
for i,l in enumerate(f):
print i, l
# prints "0 abcde" with special characters in between.
这里的重点是它像我预期的那样将其作为一行读取。现在,当我使用codecs
以UTF-8格式读取时,它会将其解释为多行。
import codecs
with codecs.open('unicodetest.txt', 'r', 'UTF-8') as f:
for i,l in enumerate(f):
print i, l
# 0 a
# 1 b
# 2 c
# 3 de
# (again with the special characters after each a, b, c, d
第28到31个字符按照顺序描述为“信息分隔符四”至“一”。两件事情引起了我的注意:1)28到30被解释为换行符,2)31没有。这是预期的行为吗?哪里可以找到将哪些字符解释为换行符的定义?是否有方法不将它们解释为换行符?
谢谢。
编辑忘记复制
codecs.open
中的“UTF-8”参数。现在,我问题中的代码已经得到更正。
'rb'
模式打开文件会发生什么? - unutbu