gpt4 book ai didi

python - 为什么网络服务器提示西里尔字母,而命令行则不然?

转载 作者:太空宇宙 更新时间:2023-11-03 18:10:15 25 4
gpt4 key购买 nike

我有一个网络服务器,我尝试在该服务器上提交包含西里尔字母的表单。结果我收到以下错误消息:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

此消息来自以下代码行:

ups = 'rrr {0}'.format(body.replace("'","''"))

(body 包含西里尔字母)。奇怪的是,我无法在 python 命令行中重现此错误消息。以下工作正常:

>>> body = 'ппп'
>>> ups = 'rrr {0}'.format(body.replace("'","''"))

最佳答案

它在交互式提示中工作,因为您的终端正在使用您的区域设置来确定要使用的编码。直接来自Python docs :

Whereas the other file-like objects in python always convert to ASCII unless you set them up differently, using print() to output to the terminal will use the user’s locale to convert before sending the output to the terminal.

另一方面,当您的服务器运行脚本时,不存在这样的假设。除非另有说明,从类似文件的对象中以字节 str 形式读取的所有内容都会在内存中编码为 ASCII。您的西里尔字符(大概编码为 UTF-8)无法转换;它们远远超出了 UTF-8 和 ASCII 之间直接映射的 U+007F 代码点。 (Unicode 使用十六进制来映射其代码点;U+007F 则为十进制的 U+00127。事实上,ASCII 仅具有 127 个零索引代码点,因为它只使用 1 个字节,而在这一个字节中,只有最低有效 7 位。最高有效位始终为 0。)

回到你的问题。如果要对文件正文进行操作,则必须指定应使用 UTF-8 编码打开它。 (再次,我假设它是 UTF-8,因为它是从网络提交的信息。如果不是——那么,它确实应该是。)解决方案已经在其他 StackOverflow 答案中给出,所以我会 just link to one of them而不是重复已经回答过的内容。最佳答案可能会有所不同,具体取决于您的 Python 版本 - 如果您在评论中告诉我,我可以为您提供更清晰的建议。

关于python - 为什么网络服务器提示西里尔字母,而命令行则不然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26113311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com