Python 3 UnicodeEncodeError(Apache)

2024-04-25 00:16:26 发布

您现在位置:Python中文网/ 问答频道 /正文

使用此代码:

#!/usr/bin/env python3
open("We’re-introducing-a-DNS-man.jpg", "wb")

我得到了一个错误:

^{pr2}$

只有在通过Apache作为CGI脚本运行脚本时才会出现错误。脚本在命令行上运行时成功运行。在

我知道我在Apache错误地设置语言环境方面遇到了很多问题,到目前为止,我已经用下面3行代码修复了前面所有的问题。在

locale.setlocale(locale.LC_ALL, "en_GB.UTF-8")
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
sys.stdin = codecs.getwriter('utf-8')(sys.stdin.detach())

但是,我不知道如何解决这个新问题,它似乎又与编码/区域设置有关。我能发现的唯一稍微可疑的事情是(这是添加了前面的行)的结果:

locale.getpreferredencoding(True)
ANSI_X3.4-1968

但是,如果我将参数改为False,我得到UTF-8。在

如何解决此编码问题?请注意,我已经调查过Apache,据我所知,它应该报告UTF-8,事实上它不是一个单独的问题,我无法在这方面取得任何进展。在

编辑:

这不是文件内容/编码的问题,因为在python3中字符串显然是utf-8,并且程序运行时没有语法错误。所有显而易见的解决办法都曾尝试过,但都失败了。在

问题是open()函数似乎正在尝试将unicode字符串转换为ascii。问题是它为什么要尝试转换成ascii,以及如何停止它?在


Tags: 代码脚本编码apache错误stdoutsysopen
2条回答
open("We’re-introducing-a-DNS-man.jpg", "wb")

把它改成

^{pr2}$

您不需要(右单引号)。请改用'(引号)。在

如果文件名是动态生成的,则需要在将其作为文件打开之前替换相同的名称。在

确保您的.py文件具有编码utf-8,在记事本++中,您可以使用Encoding -> Convert to UTF-8进行转换,然后在.py文件的顶部添加

# -*- coding: utf-8 -*-
fl = open(u"We’re-introducing-a-DNS-man.txt", "r")
print(fl.read())

尝试像上面一样添加u"filename"

我如何用utf8字符编码修复错误

演示 enter image description here

相关问题 更多 >