如何用Python将含日文的文本文件内容转换为UTF-16?
嘿,我来帮你解决这个问题!首先咱们先搞定那个烦人的LookupError,然后再实现你要的转UTF-16、分词统计的需求。
先解决编码错误问题
你遇到的LookupError: unknown encoding: utf-16,大概率是编码名称的写法问题——Python里的编码标识符更推荐用下划线形式的utf_16,而不是连字符的utf-16(部分旧版本Python对连字符的支持不太好)。不过更重要的是:你当前的代码逻辑可能有问题——如果原文件不是UTF-16编码的,直接用line.decode(encoding='utf_16')会导致解码失败,甚至乱码。
正确的实现思路
你的需求是:读取含日文的文本文件 → 将内容转换为UTF-16编码 → 用空格分词统计词数 → 正确输出多语言内容。下面是完整的可运行代码:
# 第一步:先确定原文件的实际编码(比如是UTF-8就用utf-8,Shift-JIS就用shift_jis) with open(r"C:\Users\badri\jap.txt", 'r', encoding='utf-8') as f: for line in f: # 将读取到的Unicode字符串转换为UTF-16编码的字节序列 utf16_content = line.encode('utf_16') print("转换后的UTF-16字节:", utf16_content) # 按空格分词并统计词数 word_list = line.strip().split() print(f"该行的词数: {len(word_list)}") # 打印每个分词(和你示例中的效果完全一致) for word in word_list: print(word)
关键细节解释
- 原文件编码确认:这一步是基础!一定要搞清楚你的
jap.txt实际用的是什么编码(比如常见的UTF-8、Shift-JIS),用对应的编码去读取,才能得到正确的Unicode字符串,否则会出现乱码。 - 转UTF-16的正确姿势:当你得到Unicode字符串后,用
encode('utf_16')就能把它转换成UTF-16编码的字节;如果需要指定字节序(小端/大端),可以用utf_16_le或utf_16_be;如果不想带BOM,还可以加参数encode('utf_16', errors='strict')。 - 分词统计:因为你要求用空格作为分隔符,直接用
split()方法就可以(默认会按任意空白符分割,包括空格、制表符等),不管是英文还是日文,只要单词间用空格分隔,就能正确拆分。
测试示例
如果你的jap.txt里的内容是Hello world こんにちは世界,运行代码后会输出:
转换后的UTF-16字节: b'\xff\xfeH\x00e\x00l\x00l\x00o\x00 \x00w\x00o\x00r\x00l\x00d\x00 \x00\x83\x42\x93\x42\x8b\x42\x81\x42\x8f\x42\x96\x4e\x4c\x75' 该行的词数: 3 Hello world こんにちは世界
这样就完美解决你的所有需求啦!
内容的提问来源于stack exchange,提问作者badri
相关产品推荐
相关产品推荐

