Python 2.7: 打印出解码后的字符串

2024-09-30 18:35:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件叫做:Abrázame.txt文件你知道吗

我想解码它,让python理解这个'aa'字符是什么,这样它就可以打印出Abrázame.txt文件你知道吗

以下是我在一个临时文件中的代码:

import os

s = os.path.join(r'C:\Test\AutoTest', os.listdir(r'C:\\Test\\AutoTest')[0])
print(unicode(s.decode(encoding='utf-16', errors='strict')))

我从上面得到的错误是:

Traceback (most recent call last):
  File "C:/Users/naythan_onfri/.PyCharmCE2017.2/config/scratches/scratch_3.py", line 12, in <module>
    print(unicode(s.decode(encoding='utf-16', errors='strict')))
  File "C:\Python27\lib\encodings\utf_16.py", line 16, in decode
    return codecs.utf_16_decode(input, errors, True)
UnicodeDecodeError: 'utf16' codec can't decode byte 0x74 in position 28: truncated data

我查过utf-16字符集,里面确实有“á”字符。那么为什么这个字符串不能用Utf-16解码呢。你知道吗

另外,我知道“拉丁-1”将工作,并产生字符串我寻找然而,因为这是一个自动化项目,我想确保任何与任何注册字符的文件名可以解码,并用于项目内的其他事情,例如:

“在已选定文件的文件目录中打开文件资源管理器。”

在每个编解码器中循环(请注意,我相信有93个编解码器)以找到任何一个可以解码字符串的编解码器,这是获得我想要的结果的最佳方法吗?我觉得还有比这个更好的办法。你知道吗


Tags: 文件字符串intesttxtos编解码器解码
1条回答
网友
1楼 · 发布于 2024-09-30 18:35:07

您希望在第一次读取字符串时在边缘进行解码,这样以后代码中就不会出现意外情况。在边缘,你有一些合理的机会猜测编码是什么。对于这个代码,边缘是

os.listdir(r'C:\\Test\\AutoTest')[0]

您可以获得当前文件系统目录编码。所以

import sys
fs_encoding = sys.getfilesystemencoding()
s = os.path.join(r'C:\Test\AutoTest',
    os.listdir(r'C:\\Test\\AutoTest')[0].decode(encoding=fs_encodig, errors='strict')
print(s)

请注意,一旦您解码了unicode字符串,就不需要从中构建新的unicode()对象。你知道吗

latin-1如果这是您当前的代码页,那么它可以工作。有趣的是,尽管Windows多年来在API的“W”版本中支持“宽”字符,但python2是基于单字节字符的,不使用它们。你知道吗

Python3万岁。你知道吗

相关问题 更多 >