如何解决Python3 文本编码问题:使用 for 循环从文本文件读取时额外的第一个字符
我正在尝试从文本文件中读取多个股票代码,但似乎存在文本编码问题。
这是测试文件“tickers.txt”的内容:
SPG
WBA
这是我的测试代码:
f = open("tickers.txt",'r')
for ticker in f:
t = ticker.strip()
if t:
try:
print(">"+t+"<" + ' length = '+ str(len(t)))
i = 0
while i < len(t):
print(t[i])
i += 1
print('End')
except ValueError:
print('ValueError ticker')
这是结果输出:
>SPG< length = 4
S
P
G
End
>WBA< length = 3
W
B
A
End
由于某种原因,第一个股票代码中有一个额外的字符,打印时不显示。已经阅读了 StackOverflow 上的几个问答我现在假设这是一个文本编码问题,但还不明白如何解决这个问题......我是否需要在文件打开命令中添加一个“编码”语句?如果有,是哪一个?如何检测?
解决方法
将 class Stage < ApplicationRecord
has_many :project_stages
end
更改为 print(t[i])
,我可以得到以下输出,表明额外的第一个字符是 Byte order mark。
print(i,t[i],'{:04x}'.format(ord(t[i])))
使用 >SPG< length = 4
0 feff
1 S 0053
2 P 0050
3 G 0047
End
>WBA< length = 3
0 W 0057
1 B 0042
2 A 0041
End
— UTF-8 codec with BOM signature。解码时,将跳过数据开头的可选 UTF-8 编码 BOM。
utf_8_sig
代替
f = open("tickers.txt",mode='r',encoding='utf_8_sig')
顺便说一句,不要忘记
...
f = open("tickers.txt",'r')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。