python - 阅读时Python编码问题,但打字时没有
问题描述
我正在从文本文件中读取一些字符串。其中一些字符串有一些“奇怪”的字符,例如“\xc3\xa9comiam”。如果我复制该字符串并将其粘贴到变量中,我可以将其转换为可读字符:
string = "\xc3\xa9comiam"
print(string.encode("raw_unicode_escape").decode('utf-8'))
écomiam
但如果我从文件中读取它,它就不起作用:
with open(fn) as f:
for string in f.readlines():
print(string.encode("raw_unicode_escape").decode('utf-8'))
\xc3\xa9comiam
看来解决方案一定很简单,但我找不到。我能做些什么?
谢谢!
解决方案
那些不是unicode-escape
- 顾名思义,处理 Unicode 序列,如\u00e9
但不是\xe9
.
你所拥有的是一个 UTF-8 enooded 序列。解码的方法是把它变成一个bytes
序列,然后可以解码为一个 Unicode 字符串。
# Let's not shadow the string library
s = "\xc3\xa9comiam"
print(bytes(s, 'latin-1').decode('utf-8'))
诀窍是一个肮脏的'latin-1'
秘密,它只是将每个字节转换为具有相同字符代码的字符。
对于您的文件,您可以以二进制模式打开它,这样您就不必将其显式转换为bytes
,或者您可以简单地将相同的转换应用于您读取的字符串。
推荐阅读
- azure-devops - 如何在不授予对所有存储库的访问权限的情况下将 Azure Devops 与 GitHub 连接?
- excel - 查找小子字符串(在大字符串值中)存在于数组中
- reactjs - React 如何实现它的钩子(在高层次上)
- reactjs - 如何删除出现在 React-Bootstrap 中的列之后的空白?
- c++ - Opencv链接CMAKE不起作用Ubuntu 16.04 Docker
- javascript - 使用 js 更改显示后项目变得混乱
- javascript - 带有输出的批处理文件命令(net user 和 findstr)转换为 javascript
- c# - .NET CLR Perfmon = 与 Windows 服务(名称)相关?
- swiftui - SwiftUI - 单击时 NavigationLink 不起作用
- java - 使用 selenium 网格时更改浏览器缩放级别