【发布时间】:2011-07-10 18:34:12
【问题描述】:
这是我在这里的第一个问题,如果它的格式不是这里所期望的,请提前抱歉。
我有一个小型实用程序,可以读取 ISO-8859-9 文本文件并生成其 UTF-8 副本。我找到的方法是使用encode和decode方法,当我实现前辈的方式时,文本编辑器将unicode字符显示为无关字符。
问题的转折在于文件写入正确。为了检查,我在 Mac 的 TextEdit 中创建了同一文件的手动创建版本。转换后的版本的十六进制转储和 md5sum 与手动创建的相同。然而,即使我选择 UTF-8 作为输入编码,KDE 上的 Textedit 和 Kwrite(或 Kate)都会显示荒谬的字符。为什么会发生这种情况,我该如何解决?
非常感谢。
更新:
od -c 输出如下:
首先,ISO-8859-9 文件:
0000000 374 360 i 376 347 366 334 320 335 336 307 326 T e s t
0000020 T e s t
0000024
Python 创建了 UTF-8:
0000000 ü ** ğ ** i ş ** ç ** ö ** Ü ** Ğ ** İ
0000020 ** Ş ** Ç ** Ö ** T e s t T e s t
0000037
手工创建的 UTF-8:
0000000 ü ** ğ ** i ş ** ç ** ö ** Ü ** Ğ ** İ
0000020 ** Ş ** Ç ** Ö ** T e s t T e s t
0000037
实际代码:
def convert_file(path_of_text_file):
try:
original_file = open(path_of_text_file, 'rb')
file_contents = unicode(original_file.read(), 'iso-8859-9')
original_file.close()
new_file = open("untitled2.txt", 'w+b')
new_file.write(file_contents.encode('utf8'))
new_file.close()
except IOError:
pass
也可以,手工制作的文件可以正常打开。它还具有与 python 生成的相同的 md5sum 和十六进制输出。
od -xc 输出:
还是原来的 ISO-8859-9 文件:
0000000 f0fc fe69 f6e7 d0dc dedd d6c7 6554 7473
374 360 i 376 347 366 334 320 335 336 307 326 T e s t
0000020 6554 7473
T e s t
0000024
Python 生成的 UTF-8 文件:
0000000 bcc3 9fc4 c569 c39f c3a7 c3b6 c49c c49e
ü ** ğ ** i ş ** ç ** ö ** Ü ** Ğ ** İ
0000020 c5b0 c39e c387 5496 7365 5474 7365 0074
** Ş ** Ç ** Ö ** T e s t T e s t
0000037
手工制作的 UTF-8 文件:
0000000 bcc3 9fc4 c569 c39f c3a7 c3b6 c49c c49e
ü ** ğ ** i ş ** ç ** ö ** Ü ** Ğ ** İ
0000020 c5b0 c39e c387 5496 7365 5474 7365 0074
** Ş ** Ç ** Ö ** T e s t T e s t
0000037
另一个有趣的注意事项:BBEdit 可以很好地处理 python 创建的文件。
【问题讨论】:
-
显示两个文件的一些
od -c输出。 -
显示一些代码,以及输入/输出。
-
如果您保存手工制作的文件,关闭程序并重新打开它,它是否仍能正常显示?
-
更好,显示一些
od -xc输出
标签: python file unicode encoding save