Python 3 UTF-8编码实际上不起作用

Python 3 UTF-8编码实际上不起作用,python,encoding,utf-8,Python,Encoding,Utf 8,我现在已经读了很多关于Python3中UTF-8编码的主题,但它仍然不起作用,我也找不到我的错误 我的代码如下所示 def main(): with open("test.txt", "rU", encoding='utf-8') as test_file: text = test_file.read() print(str(len(text))) if __name__ == "__main__": main() ö 我的test.txt文件

我现在已经读了很多关于Python3中UTF-8编码的主题,但它仍然不起作用,我也找不到我的错误

我的代码如下所示

def main():

    with open("test.txt", "rU", encoding='utf-8') as test_file:
        text = test_file.read()
    print(str(len(text)))


if __name__ == "__main__":

    main()
ö
我的
test.txt
文件如下所示

def main():

    with open("test.txt", "rU", encoding='utf-8') as test_file:
        text = test_file.read()
    print(str(len(text)))


if __name__ == "__main__":

    main()
ö
我得到以下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf6 in position 0: invalid start byte

您的文件不是UTF-8编码的。我也不确定F6在
ä
中使用了什么编码;该代码点是拉丁语1和CP-1252中
ö
的编码:

>>> b'\xf6'.decode('utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf6 in position 0: invalid start byte
>>> b'\xf6'.decode('latin1')
'ö'
>>b'\xf6'.解码('utf8')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
UnicodeDecodeError:“utf-8”编解码器无法解码位置0中的字节0xf6:无效的开始字节
>>>b'\xf6'.解码('latin1')
'ö'
您需要将该文件另存为UTF-8,使用任何用于创建该文件的工具

如果
open('text').read()
有效,则可以使用默认的系统编码对文件进行解码。见:

encoding是用于解码或编码文件的编码的名称。这只能在文本模式下使用。默认编码依赖于平台(无论返回什么),但是可以使用Python支持的任何编码

这并不是说您正在使用正确的编码读取文件;这只是意味着默认编码没有中断(遇到的字节没有字符映射)。它仍然可能将这些字节映射到错误的字符

我敦促您仔细阅读Unicode和Python:

  • 乔尔斯波尔斯基

  • 内德·巴奇尔德


您的文件不是UTF-8编码的。它是一个测试文件。我应该用Python3编写一个程序,可以读取它。再把它写出来。它应该是UTF-8格式的。这里有两个问题——要么你的文件不是UTF-8,要么你的文件不是UTF-8,如果不是UTF-8,那么里面除了
ä
之外还有其他内容。我从大学的服务器上得到了测试文件。所以我想这个文件应该没问题。提示是我可以用open(test.txt).read()读取文件,并且它可以正常工作。。。我不明白。@GVVMultigamingClan:
open()
without
encoding
将您的系统默认值作为编码。如果
open('test.txt').read()。