0

我有一个包含 Unicode 日文的文件,我想将其转换为 Shift-JIS 并将其打印为 Shift-JIS 编码文件。我这样做:

with open("unikanji.txt", 'rb') as unikanjif:
    unikanji = unikanjif.read()

sjskanji = unikanji.decode().encode('shift-jis')

with open("kanji.txt", 'wb') as sjskanjif:
    sjskanjif.write(sjskanji)

它的工作原理是当我打开 kanji.txt 时,它总是作为 Ansi 文件打开,而不是 Shift-JIS,而且我看到的是杂项字符而不是日语。如果我手动将文件编码更改为 Shift-JIS,那么杂项字符会变成正确的日文字符。如何让我的程序首先将文件创建为 Shift-JIS?

4

1 回答 1

0

“ANSI”是 Microsoft 对默认的本地化编码的术语,它根据所使用的 Windows 的本地化版本而有所不同。像记事本这样的 Microsoft 程序假定文本文件的编码为“ANSI”,除非它以字节顺序标记开头。Microsoft 记事本可识别 UTF-8、UTF-16LE 和 UTF-16BE BOM。

Shift-JIS 是一种本地化编码,因此您必须使用 Notepad++ 等编辑器并手动将其配置为 Shift-JIS,正如您所发现的。您编写的文件Shift-JIS 编码的,但除非您使用的编辑器有一些启发式方法来检测编码,否则必须手动配置它。您还可以使用日语 Windows 或更改当前 Windows 版本中的本地化默认值,Shift-JIS 可能是 ANSI 默认值。

顺便说一句,转换编码可能更简单一些。下面假设原始文件是 UTF-8,目标文件是 shift-jis。 utf-8-sig自动处理和删除字节顺序标记(如果存在)。

with open('unikanji.txt',encoding='utf-8-sig') as f:
    text = f.read()

with open('kanji.txt','w',encoding='shift-jis') as f:
    f.write(text)
于 2016-11-02T17:35:03.643 回答