首页 > 解决方案 > len() 为字符串返回错误的数字

问题描述

我在命令行上运行一个简单的脚本: echo "Alex " > alex.txt

len(open("alex.txt").read()) returns 16 instead of 5

当我跑步时,open("alex.txt").read()我得到:

ÿþA\x00l\x00e\x00x\x00 \x00\n\x00\n\x00

问题是什么?

标签: pythonstring

解决方案


文件中的字节数和字符串中的字符数通常是不同的东西。

坚持使用有限的字符集,例如 ASCII,您可以得到一对一,但现代编程语言比这更复杂,并且至少尝试为更广泛的书面语言提供服务。

您通常需要知道编码是什么。您可能不会在文件本身中得到任何指示。

读取字节后,您需要将这些字节编码为字符串:

open("alex.txt","rb").read().decode('utf-16')

您可以open为您执行此操作,这可能更可靠:

open("file.txt",encoding='utf-16').read()

现在,如果您想花哨并从 BOM 中获取编码,您可以在此处查看答案:

在 Python 中使用 BOM 字符读取 Unicode 文件数据


推荐阅读