- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
它在执行以下代码时抛出“UnicodeDecodeError:‘ascii’编解码器无法解码位置 2 中的字节 0xc2:序号不在范围内(128)”:
filename = 'Spywaj.ttf'
print repr(filename)
>> 'Sp\xc2\x88ywaj.ttf'
filepath = os.path.join('/dirname', filename)
但是文件是有效的并且存在于磁盘上。文件名是从“unzip -l”命令中提取的。如何加入这样的文件名?
操作系统和文件系统
Filesystem: ext3 relatime,errors=remount-ro 0 0
Locale: en_US.UTF-8
Alex 的建议 os.path.join 现在有效,但我仍然无法使用它加入的文件名访问磁盘上的文件。
filename = filename.decode('utf-8')
filepath = os.path.join('/dirname', filename)
print filepath
>> /dirname/u'Sp\xc2\x88ywaj.ttf'
print os.path.isfile(filepath)
>> False
new_filepath = filepath.encode('Latin-1').encode('utf-8')
print new_filepath
>> /dirname/u'Sp\xc2\x88ywaj.ttf'
print type(filepath)
>> <type 'unicode'>
print os.path.isfile(new_filepath)
>> False
valid_filepath = glob.glob('/dirname/*.ttf')[0]
print valid_filepath
>> /dirname/Spywaj.ttf (SO cannot display the chars in filename)
print type(valid_filepath)
>> <type 'str'>
print os.path.isfile(valid_filepath)
>> True
最佳答案
在 Latin-1 (ISO-8859-1) 和 Windows-1252 中,0xc2 都是带有抑扬音符的大写字母 A……您显示的代码中似乎没有任何位置!你能加一个吗
print repr(filename)
在 os.path.join
调用之前(并将 '/dirname'
放入变量中并打印其 repr 以确保完整性?)。我在想,也许那个杂散的角色存在,但由于某种原因您没有看到它——repr
会揭示它。
如果您的文件名中确实有 Latin-1(或 Win-1252)非 Ascii 字符,则必须使用 Unicode——和/或根据您的操作系统和文件系统,使用一些特定的编码。
编辑:感谢 repr
,OP 确认实际上有 两个 字节不可能是 ASCII -- 0xc2然后是 0x88,对应于 OP 认为的是一个小写的 L。好吧,该序列将是一个 Unicode 大写字母 A 和插入符号(代码点 0x88),采用非常流行的 UTF-8 编码 - 对于 OP 乞丐解释,这看起来像一个小写字母 L,但我想 < em>一些字体可能在图形上疯狂到足以承受这样的困惑。
所以我会首先尝试 filename = filename.decode('utf-8')
- 这应该允许 os.path.join
工作。如果 open
然后对生成的 Unicode 字符串犹豫不决(它可能有效,具体取决于文件系统和操作系统),下一次尝试是尝试使用该 Unicode 对象的 .encode('Latin-1')
和 .encode('utf-8')
。如果所有编码都不起作用,关于正在使用的操作系统和文件系统的信息(我相信 OP 尚未提供)将变得至关重要。
关于python - 加入文件名时出现 UnicodeEncodeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2004137/
我不确定为什么会收到此错误: Exception Type: UnicodeEncodeError Unicode error hint The string that could not be en
我正在使用python-twiter使用 Twitter 的 API 搜索推文,但我遇到中文术语问题。这是重现该问题的最小代码示例: # -*- coding: utf-8 -*- import tw
我正在尝试使用 Twitter API 和 Python 来浏览 Twitter BIOS。 但是我收到此错误: newFile.writerow(info) UnicodeEncodeError:
我正在使用 Requests 和 BeautifulSoup 以及 Python 3.4 从网站上抓取可能包含也可能不包含日语或其他特殊字符的信息。 def startThisPage(url):
我有一个这样的记录器设置: import logging from logging.handlers import RotatingFileHandler import sys # root logg
我有一个 Python 抓取器,它抓取一个网站并将数据插入 MySql 数据库。突然间我得到了一个错误 UnicodeEncodeError: 'latin-1' codec can't encode
此代码应将一些文本写入文件。当我尝试将文本写入控制台时,一切正常。但是当我尝试将文本写入文件时,出现 UnicodeEncodeError。我知道,这是一个常见问题,可以使用适当的解码或编码来解决,但
我正在从事一个涉及自动生成文档(通过 latex )的项目。创建这些文档的人在 Windows 机器上工作(他以前使用 Microsoft word,但现在他在记事本中编辑它们)。无论如何,我注意到有
当我尝试在 UTF-8 字符串中查找单词的计数时,我得到了下一个: UnicodeEncodeError UnicodeEncodeError: 'ascii' codec can't encode
我在尝试将 UTF-8 字符串转换为 unicode 时遇到问题。我收到错误。 UnicodeEncodeError: 'ascii' codec can't encode characters in
我正在尝试用 Python 和 BeautifulSoup 解析这个文档: http://en.wikipedia.org/w/api.php?format=xml&action=opensearch
我正在尝试使用简单的 python print 语句。 print('这是') 但我遇到了这些问题。 我正在使用Windows。原子IDE。 python 3.6.5问候,巴努。 最佳答案 将 # -
无论我尝试什么解码和编码,我似乎都无法让它工作。我目前收到错误: UnicodeEncodeError: 'ascii' 编解码器无法对字符 u'\u2013' 进行编码 但是如果我要添加解码和编码,
这个问题已经有答案了: Python: Unicode and ElementTree.parse (3 个回答) 已关闭 7 年前。 在我的 Django 应用程序中,我使用 suds 库发出了肥皂
我正在尝试从 rockyou 单词列表中读取内容并将所有 >= 8 个字符的单词写入新文件。 这是代码 - def main(): with open("rockyou.txt", encod
我正在使用“pdfminer.six”(一个 Python 库)从我拥有的几个 PDF 中提取所有文本。我的方法工作完美,但对于某些 pdf,可能有一些特殊字符,当我将其写入文本文件时,我收到“Uni
我在生产系统中遇到错误,但我无法在开发环境中重现该错误: with io.open(file_name, 'wt') as fd: fd.write(data) 异常(exception):
当运行从标准输入读取的 Python 程序时,出现以下错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
它在执行以下代码时抛出“UnicodeDecodeError:‘ascii’编解码器无法解码位置 2 中的字节 0xc2:序号不在范围内(128)”: filename = 'Spywaj.ttf'
我有一个 python 脚本,在我的本地机器 (OS X) 上运行良好,但是当我将它复制到服务器 (Debian) 时,它无法按预期运行。该脚本读取 xml 文件并以新格式打印内容。在我的本地机器上,
我是一名优秀的程序员,十分优秀!