首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果没有定义基编码,则继续获取3.10.4上的编码错误

如果没有定义基编码,则继续获取3.10.4上的编码错误
EN

Stack Overflow用户
提问于 2022-04-05 00:35:58
回答 1查看 126关注 0票数 0

看一些youtube教程。使用ver 3.8.2的人,我安装了3.10.4。他像这样打字,效果很好:

代码语言:javascript
复制
r = open('file.txt', 'a')
r.write('something' + '\n')
r.write('что-то')
r.close()

如果我也这么做,我会得到UnicodeEncodeError

代码语言:javascript
复制
 Traceback (most recent call last): File "C:\Users\small\Desktop\test.py", line 3, in <module> r.write('что-то') File "C:\Python310\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> 

并被迫为打开的文件声明如下编码:

代码语言:javascript
复制
r = open('file.txt', 'a', encoding='utf-8')
r.write('something' + '\n')
r.write('что-то')
r.close()

主要对以下两个问题感兴趣:

  1. 这是因为操作系统版本(我有最新的win10版本)或python版本或smth版本的差异在公元前发生了吗?
  2. 有办法永久解决这个问题吗?我考虑在程序开始时声明编码类型,但是如果字符串不是基编码类型,那么在从不同来源获取字符串方面就会变得不灵活。在这种情况下,我将被迫对编码类型进行大量检查,并将其转换为unicode-8。这个解决方案看上去不太合适。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 01:02:06

open函数的默认编码是平台相关

在Unix上,它是LC_CTYPE语言环境的编码。它可以用locale.setlocale(locale.LC_CTYPE, new_locale)设置。 在Windows上,它是ANSI代码页(例如:cp1252)。

所以是的,这是因为操作系统的不同。经常指定encoding编写独立于平台的代码是一个很好的习惯。

您还可以通过启用Python UTF-8 mode使其永久化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71745157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档