【问题标题】:character set issue UTF-8字符集问题 UTF-8
【发布时间】:2016-03-16 06:02:49
【问题描述】:

我有一个文档,其中“doesn't”一词包含撇号,如下所示。

当我试图通过 python 程序处理它时,它显示单词为“dosÆt”并退出并出现如下所述的错误。

UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 70: invalid start byte

我在记事本中打开文档并将编码从 ANSI 更改为 UTF-8(在网上某处找到),现在它工作正常。

但是有人可以解释一下,所有这些都是关于什么的,我如何用我的笔记本电脑键盘输入那种撇号。

【问题讨论】:

  • 嗯,我希望你可以发布原始“不”的文字而不是图片。 Python 对 ASCII 撇号应该没有问题。可能看起来像撇号的东西实际上是一个不同的非标准字符。

标签: python python-2.7 utf-8 character-encoding special-characters


【解决方案1】:

MS Word 以将引号转换为“智能引号”而著称,因此它们可以正确地环绕单词或指向正确的方向作为撇号。

您对复制粘贴并不完全忠实,因此很难确定我们在谈论同一件事。

例如,这里是与普通 ascii 相比的智能引号:

不与不

“你好”与“你好”

注意左边的智能引号是如何卷曲的。在您的屏幕截图中, 将映射到 Unicode 点 U+2019(“右单引号”)。您无法通过使用 Windows 组合键并键入 Unicode 值轻松手动键入智能引号。

然后您可能已将此文本保存为 Windows-1252(西欧)编码(又名 ANSI),它分配了字节 0x92。然后,您将其加载到 Python 中,但传递了不正确的 UTF-8 编码。那是你看到异常的时候。

以后处理这个问题的方法是在Python中打开文件时指定正确的编码。例如

with io.open("myfile.txt", 'r', encoding="windows-1252") as my_file:
    my_data = my_file.read()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2011-04-19
    • 2012-11-10
    • 1970-01-01
    • 2013-05-26
    • 2011-11-04
    相关资源
    最近更新 更多