Python 如何更正存储为ASCII的UTF-8字符

Python 如何更正存储为ASCII的UTF-8字符,python,utf-8,Python,Utf 8,我有一些以ASCII格式存储的旧数据。显然,有一些UTF-8数据在写入之前未正确转换为ASCII。例如,José将作为José出现在文件中。我可以用下面的Java代码片段轻松地解决这个问题: byte[] utf8Bytes = c_TOBETRANSLATED.getBytes("ISO-8859-1"); String s2 = new String(utf8Bytes,"UTF-8"); 但是我需要用我剩下的代码来完成这个Python。我只是刚刚开始使用Python,我的互联网搜索和试

我有一些以ASCII格式存储的旧数据。显然,有一些UTF-8数据在写入之前未正确转换为ASCII。例如,
José
将作为
José出现在文件中。我可以用下面的Java代码片段轻松地解决这个问题:

byte[] utf8Bytes = c_TOBETRANSLATED.getBytes("ISO-8859-1");
String s2 = new String(utf8Bytes,"UTF-8");

但是我需要用我剩下的代码来完成这个Python。我只是刚刚开始使用Python,我的互联网搜索和试错并不能帮助我找到一个Python解决方案来做同样的事情

如果您使用的是Python 3,则可以使用:

如果文件“中有
“JosÙ”
,则文件查看器读取/显示的数据不正确。这是UTF-8,但解码时使用了错误的编码。例如:

import locale

# Correctly written
with open('file.txt','w',encoding='utf8') as f:
    f.write('José')

# The default encoding for open()
print(locale.getpreferredencoding(False))

# Incorrectly opened
with open('file.txt') as f:
    data = f.read()
    print(data)
    # What I think you are requesting as a fix.
    # Re-encode with the incorrect encoding, then decode correctly.
    print(data.encode('cp1252').decode('utf8'))

# Correctly opened
with open('file.txt',encoding='utf8') as f:
    print(f.read())
输出:

cp1252
José
José
José

你使用的是Python 2还是Python 3?这不是ASCII码。令我恐惧的是,我发现这可能是故意的;一种Base256,字节值转换为ISO 8859-1字符,因此字节序列可以存储在字符串数据类型中。您的问题描述听起来像是在使用拉丁语-1查看UTF-8文件。文件中的实际字节是多少?
cp1252
José
José
José