python-3.x - UnicodeEncodeError - 如何在 python 3 中输出俄语字符
问题描述
我正在尝试使用 pymongo 查询 MongoDB 数据库中的数据。集合中的某些文档具有俄语字符作为值,例如“Л”、“о”或“ч”。每当我查询具有此类字符的文档时,我都会得到以下输出:
>>> pprint(db.mycollection.find_one({}))
{
"_id" : ObjectId('123456')
"name" : Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>
}
起初,我认为“名称”值只是损坏了。因此,我登录到 MongoDb Atlas/Compass 并通过“_id”搜索用户。(在上面的例子中,我会搜索 ObjectId('123456')),它成功地返回了带有俄语字符名称值的文档。我在 stackoverflow 上环顾四周,并尝试使用 utf8 和 cp1252 进行不同的编码和解码链,但我仍然遇到同样的错误。有人对可能发生的事情有任何想法吗?
更新:程序在 Windows 终端上运行并正确显示俄语字符。但是,我想探索如何使用 sublime 构建它。这是我用来编译 sublime 的 python3.sublime-build:
{
"cmd": ["C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\python.exe", "-u", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python"
}
另外, print(sys.stdout.encoding) 输出使用 sublime 编译的 cp1252,但它在 windows 终端中输出 utf-8 编译。
解决方案
在 sublime-build 中添加两行对我有用:
{
"cmd": ["python", "-u", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"encoding": "utf8",
"env": {"PYTHONIOENCODING": "utf-8", "LANG": "en_US.UTF-8"},
}
推荐阅读
- c# - 如何使用 Visual Studio 安装程序安装项目在受信任的根证书颁发机构上安装证书
- reactjs - 语义 UI 反应不受控制的下拉清除
- reactjs - Spring-React frontend-maven-plugin 不起作用
- javascript - OnSubmit 之前会等待 OnBlur 执行吗?
- slack-api - Slack API - 在 API 调用中动态设置机器人显示名称
- ios - 如何解决 SwiftUI Tap 冲突?
- python - 使用 plotnine 和 pandas 绘制来自不同数据集的数据
- javascript - 在evaluateJavascript中提交的Android webview表单不起作用
- javascript - Firebase:collectionGroup.doc 不是函数
- python - 执行js命令“document.getElementsByClasName”的Bs4方式是什么?