【问题标题】:Convert shift_jis to utf-8将 shift_jis 转换为 utf-8
【发布时间】:2014-09-27 20:58:10
【问题描述】:

我有一堆用 shift_jis 编码的 txt 文件,我想将它们转换为 utf-8 编码,以便特殊字符可以正常显示。以前可能有人问过这个问题,但我似乎无法正确回答。

更新:我更改了我的代码,所以它首先写入一个列表,然后它会从列表中写入内容。

words = []
with codecs.open("dummy.txt", mode='r+', encoding='shiftjis') as file:
    words = file.read()
    file.seek(0)
    for line in words:
        file.write(line.encode('utf-8'))

但是现在我得到运行时错误,程序只是崩溃了。 经过进一步调查,似乎“file.seek(0)”导致程序崩溃。如果此行被注释,程序运行不会出错。我不知道为什么会这样。它是如何导致错误的?

【问题讨论】:

  • 应该标记 Python 吗?
  • 谢谢,我感觉我错过了什么
  • “更新:我更改了我的代码,因此它首先写入一个列表,然后它会写入列表中的内容。” 我在您的代码中没有看到列表sn-p?
  • @tonywang:实际上,您的代码根本不会写入列表。您的代码使用列表初始化words,然后将其直接替换为文件的全部内容字符串(这是file.read() 的输出)。
  • 我认为您不能期望将 UTF-8 写入使用 encoding='shiftjis' 打开的文件;即使它有效,它只会将您的 UTF-8 转换回 Shift-JIS。

标签: python utf-8 encode shift-jis


【解决方案1】:

你不能像这样同时读取和写入同一个文件。这就是为什么它不起作用。输入和输出是缓冲的,并且文件对象共享相同的文件指针,因此很难预测会发生什么。您要么需要将输出写入另一个文件,要么将整个文件读入内存,关闭它,重新打开它,然后将其写回。

with codecs.open("dummy.txt", mode='r', encoding='shiftjis') as file:
    lines = file.read()

with codecs.open("dummy.txt", mode='w') as file:
    for line in lines:
        file.write(line)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2020-06-07
    • 2019-10-31
    相关资源
    最近更新 更多