我在命令行上运行一个简单的脚本:echo "Alex "比;alex.txt
len(open("alex.txt").read()) returns 16 instead of 5
当我运行open("alex.txt").read()
时,我得到:
ÿþAx00lx00ex00xx00 x00nx00nx00
有什么问题吗?
文件中的字节数和字符串中的字符数通常是不同的。
坚持使用有限的字符集,例如ASCII,您可以得到一对一,但现代编程语言比这更复杂,并且至少试图服务于更广泛的书面语言。
通常需要知道编码是什么。您可能不会在文件本身中得到任何指示。
读取字节后,需要将这些字节编码为字符串:
open("alex.txt","rb").read().decode('utf-16')
您可以让open
为您做这些,这可能更可靠:
open("file.txt",encoding='utf-16').read()
现在,如果您想更花哨一点,并从BOM中获得编码,您可以在这里查看答案:
使用Python中的BOM字符读取Unicode文件数据