You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:11:12