繁体   English   中英

为什么Web服务器不抱怨西里尔字母而命令行呢?

[英]Why web-server complains about Cyrillic letters and command line not?

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

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文档

除非您进行其他设置,否则python中的其他类似文件的对象始终会转换为ASCII,而使用print()输出到终端将在发送输出到终端之前使用用户的语言环境进行转换。

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

回到你的问题。 如果要对文件的主体进行操作,则必须指定应使用UTF-8编码将其打开。 (再次,我假设它是UTF-8,因为它是从Web提交的信息。如果不是,那么,确实应该是。)该解决方案已经在其他StackOverflow答案中给出,因此我将链接到其中之一,而不是重申已经回答的内容。 最佳答案可能会有所不同,具体取决于您的Python版本-如果您在评论中让我知道,我可以给您更清​​晰的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM