Python 如何更正存储为ASCII的UTF-8字符
我有一些以ASCII格式存储的旧数据。显然,有一些UTF-8数据在写入之前未正确转换为ASCII。例如,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,我的互联网搜索和试
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é