UnicodeEncodeError:在 UTF-8 语言环境中打印时,“ascii”编解码器无法对字符“\xe9”进行编码

2024-04-17

我正在清理 Europarl 的法语单语语料库(http://data.statmt.org/wmt19/translation-task/fr-de/monolingual/europarl-v7.fr.gz http://data.statmt.org/wmt19/translation-task/fr-de/monolingual/europarl-v7.fr.gz)。原始原始数据在.gz文件(我使用下载wget)。我想提取文本并查看它的外观,以便进一步处理语料库。

使用以下代码提取文本gzip,我获得了该类的数据bytes.

with gzip.open(file_path, 'rb') as f_in:
    print('type(f_in)=', type(f_in))
    text = f_in.read()
    print('type(text)=', type(text))

第一行几行的打印结果如下:

类型(f_in) = 类 'gzip.GzipFile'

类型(文本)= 类“字节”

b'Reprise de la session\nJe d\xc3\xa9clare reprise la session du Parlement europ\xc3\xa9en qui avait \xc3\xa9t\xc3\xa9 interrompue le vendredi 17 d\xc3\xa9cembre dernier et je vous renouvelle tous mes vux esp\xc3\xa9rant que vous avez pass\xc3\xa9 de bonnes vacances.\nComme vous avez pu le constater, le grand "bogue de l\'an 2000" ne s\'est pas produit.\n

我尝试使用解码二进制数据utf8 and ascii使用以下代码:

with gzip.open(file_path, 'rb') as f_in:
    print('type(f_in)=', type(f_in))
    text = f_in.read().decode('utf8')
    print('type(text)=', type(text))

它返回这样的错误:

UnicodeEncodeError:“ascii”编解码器无法对位置 26 中的字符“\xe9”进行编码:序号不在范围内(128)

我也尝试过使用codecs and unicodedata包打开文件,但它也返回编码错误。

您能否帮我解释一下我应该做什么才能以正确的格式获取法语文本,例如这样?

重开会议\n我宣布重开欧洲议会会议,并于 12 月 17 日开始对卖方进行插话,我们将重新开始,以敏锐的洞察力来度过美好的假期。\n祝您一切顺利,伟大的“ bogue de l'an 2000" 不是产品。\n

非常感谢您的帮助!


发生 UnicodeEncodeError 的原因是,在打印时,Python 将字符串编码为字节,但在本例中,所使用的编码 - ASCII - 没有与 '\xe9' 匹配的字符,因此会引发错误。

设置Python编码 https://docs.python.org/3.5/using/cmdline.html#envvar-PYTHONIOENCODING环境变量强制Python使用不同的编码——环境变量的值。 UTF-8编码可以对任何字符进行编码,因此像这样调用程序可以解决问题:

PYTHONIOENCODING=UTF-8 python3  europarl_extractor.py

假设代码是这样的:

import gzip

if __name__ == '__main__':
    with gzip.open('europarl-v7.fr.gz', 'rb') as f_in:
        bs = f_in.read()
        txt = bs.decode('utf-8')
        print(txt[:100])

环境变量可以通过其他方式设置 - 通过export声明,在.bashrc, .profile etc.

一个有趣的问题是whyPython 正在尝试将输出编码为 ASCII。我曾假设在 *nix 系统上,Python 本质上是查看$LANG环境变量来确定要使用的编码。但在这种情况下的值$LANG is fr_FR.UTF-8,但 Python 使用 ASCII 作为输出编码。

从看source https://github.com/python/cpython/blob/3.5/Lib/locale.py为了locale模块,以及这个FAQ https://www.cl.cam.ac.uk/~mgk25/unicode.html#activate,按顺序检查这些环境变量:

'LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE'

所以这可能是其中之一LC_ALL or LC_CTYPE已设置为在您的环境中强制使用 ASCII 编码的值(您可以通过运行locale终端中的命令;也在运行locale charmap会告诉你编码本身)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UnicodeEncodeError:在 UTF-8 语言环境中打印时,“ascii”编解码器无法对字符“\xe9”进行编码 的相关文章

随机推荐

  • 当一个对象被分配给另一个对象时会发生什么

    public class DrumKitTestDrive param args public static void main String args TODO Auto generated method stub Echo e1 new
  • Java 中枚举类型的强制初始化

    我试图找到一种方法来强制 Java 加载 初始化枚举类型 嵌套在包含静态 Map 的类中 这对我来说很重要 因为枚举类型有一个填充所述映射的构造函数 并且如果没有显式方法来初始化此枚举 则映射将保持为空 我尝试过使用Class forNam
  • Tensorflow:如何查看张量板中的检查点?

    假设我有内容检查点 checkpoint model ckpt 240000 data 00000 of 00001 model ckpt 240000 index model ckpt 240000 meta 是否可以在张量板中查看检查点
  • 将 webpack(环境)变量传递给 scss 文件

    对 webpack 非常陌生 我希望能够读取一个值 在本例中具体是env from webpack config js in a sass文件 这样我就可以根据环境有不同的CSS 例如 env 开发 颜色 绿色 env 生产 颜色 蓝色 到
  • 比较没有毫秒的日期时间

    I need to compare dates in two separate list Each list is constructed of MyFile Objects That is a class that I created i
  • Spring Data 和具有分页功能的本机查询

    在一个网络项目中 使用最新的 spring data 1 10 2 和 MySQL 5 6 数据库 我尝试使用带分页的本机查询 但我遇到了org springframework data jpa repository query Inval
  • 如何更改appBar后退按钮颜色

    我不知道如何将应用程序栏的自动后退按钮更改为不同的颜色 它在脚手架下 我试图研究它 但我无法理解它 return Scaffold appBar AppBar backgroundColor Colors white title Image
  • 您上传的二进制文件无效。使用 SDK 的预发布测试版来构建应用程序

    我在将新应用程序提交到应用程序商店时遇到问题 Itunes Connect 给我错误 您上传的二进制文件无效 SDK 的预发布测试版用于构建该应用程序 我没有更改任何内容 我可以编译为临时证书并且工作正常 我昨天上传了另一个应用程序 效果也
  • 如何用CSS取消选择?

    我想从选择中取消选择 id 项目 而不更改 HTML 或添加任何类名 假设我想在 CSS 中模拟这个 Jquery 句子 img not thisone CSS 是否可以 使用 CSS3 not 选择器 它具有等效的jQuery 选择器 h
  • 比较两个 Date 实例是否指同一天

    我有两个 java util Date 的 Java 实例 我必须查明它们是否指同一天 我可以用困难的方法来做到这一点 将日期分开并比较日期 确保年份也匹配 由于这是一个很常见的问题 我希望有一个更简单的解决方案来解决这个问题 Thanks
  • 处理innoDB死锁

    我一直在得到一个Deadlock found when trying to get lock try restarting transaction我的 InnoDB 表上出现错误 这是查询 UPDATE views SET visit cn
  • 如何解决PHP扩展“0”必须加载的问题?

    我正在尝试在我的服务器上安装 Magento 我做了一切 正如文档中所写的 我有以下错误 必须加载 PHP 扩展 0 当我尝试在浏览器中的第二页上配置 Magento 时 会发生这种情况 你知道如何解决这个问题吗 如果您安装的是 Magen
  • PHP 表单从 id 发送值而不是值

    我通常在带有隐藏字段的表单中做类似的事情
  • 如何查找总和位于给定值范围内的整数数组中的所有有序元素对

    给定一个整数数组 查找数组中总和位于给定范围 a b 内的所有有序元素对的数量 这是一个 O n 2 的解决方案 counts all pairs in array such that the sum of pair lies in the
  • 在 JavaScript 中使用 Rails 变量时转义引号?

    我在尝试在 javascript 代码中使用 Rails 变量时遇到问题 例如 我可能定义一个 link to remote 带有参数 complete gt alert my var If my var I m testing 那么 ja
  • 任务似乎自动开始

    我正在移植一个加载时间很长的程序 当我移植它时 它根本没有得到改善 因为缓慢是因为访问数据库服务器 而不是次优代码 我已将加载移动到一个单独的线程上Tasks库 现在 UI 在加载时不会冻结 但它确实让我对某些事情感到好奇 The Task
  • 使用弹簧对安全休息控制器进行单元测试

    我有一个使用 Spring Boot 编写的非常小的 REST 应用程序 我想编写一个用于身份验证的单元测试 但即使我将 MockWithUser 添加到测试中 我也会收到 401 错误 重要的文件是 安全配置 Configuration
  • ptr_vector如何管理内存?

    我目前正在使用 c 使用 opengl 进行较低级别的编码 我来自一个沉重的 objc 背景 所以我对内存管理有一些了解 但我似乎无法理解 boost 库如何管理容器类型 例如ptr vector 我认为我的问题与我不知道如何ptr vec
  • 使用 dplyr 过滤包含部分列字符串的行

    假设我有一个像这样的数据框 term cnt apple 10 apples 5 a apple on 3 blue pears 3 pears 1 如何过滤此列中所有部分找到的字符串 例如得到结果 term cnt apple 10 pe
  • UnicodeEncodeError:在 UTF-8 语言环境中打印时,“ascii”编解码器无法对字符“\xe9”进行编码

    我正在清理 Europarl 的法语单语语料库 http data statmt org wmt19 translation task fr de monolingual europarl v7 fr gz http data statmt