如何在Python中通过char读取UTF文件char

Web*_*ode 3 python utf python-2.7

我有UTF-8文件,我想用一些HTML标签替换一些2字节的字符.

我想为此制作Python脚本.只需读取文件,char by char,然后输入if等等.

我遇到的问题是,如果我通过char读取char,我正在读取一个字节,但有些字符是1字节,有些是2字节长.

怎么解决?

我基本上需要通过char读取char的功能,但它会知道这个char大小为1或2个字节.

Tim*_*ker 5

您需要在指定正确的编码时打开文件.在Python 3中,已经完成了

with open("myfile.txt", "r", encoding="utf-8-sig") as myfile:
    contents = myfile.read()
    for char in contents:
        # do something with character
Run Code Online (Sandbox Code Playgroud)

在Python 2中,您可以使用该codecs模块:

import codecs
with codecs.open("myfile.txt", "r", encoding="utf-8-sig") as myfile:
    contents = myfile.read()
    for char in contents:
        # do something with character
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,Python 2不会执行自动换行转换,因此您需要\r\n显式处理行结尾.

作为替代方案(Python 2),您可以正常打开文件并在之后解码; 这会将行结尾标准化为\n:

with open("myfile.txt", "r") as myfile:
    contents = myfile.read().decode("utf-8-sig")
    for char in contents:
        # do something with character
Run Code Online (Sandbox Code Playgroud)

请注意,在这两种情况下,您将最终使用Python 2中的Unicode对象,而不是字符串(在Python 3中,所有字符串都是Unicode对象).