Python 关于Mac OS X Lion上的Apache
总体而言,我对Apache还比较陌生,因为我刚刚开始Web开发,所以如果我没有提供足够的信息,请询问更多细节 我使用的是Lion附带的现成Apache,我创建了一个Python应用程序,每隔一段时间就需要打印一个UTF-8字符 然而,无论我使用什么方法,或者我尝试了多少,当我试图打印一个UTF-8字符时,它都会抛出一个Python 关于Mac OS X Lion上的Apache,python,macos,apache,encoding,utf-8,Python,Macos,Apache,Encoding,Utf 8,总体而言,我对Apache还比较陌生,因为我刚刚开始Web开发,所以如果我没有提供足够的信息,请询问更多细节 我使用的是Lion附带的现成Apache,我创建了一个Python应用程序,每隔一段时间就需要打印一个UTF-8字符 然而,无论我使用什么方法,或者我尝试了多少,当我试图打印一个UTF-8字符时,它都会抛出一个500内部服务器错误,我将一无所获 我尝试过的各种事情: 直接从Python代码打印出字符(代码顶部有#-*-coding:utf-8-*-) 使用.decode('utf-8'
500内部服务器错误
,我将一无所获
我尝试过的各种事情:
- 直接从Python代码打印出字符(代码顶部有
)#-*-coding:utf-8-*-
- 使用
功能打印出字符。(这将导致打印出3个单独的字符。).decode('utf-8')
- 打印出一个占位符,然后打印出Jquery,它将用符号替换占位符(页面会抛出一个内部服务器错误)
- 打印出一个占位符,然后打印出一个指向将替换它的Jquery脚本的链接。(Firebug说Firefox在尝试访问脚本时出现500服务器错误。)
<type 'exceptions.UnicodeDecodeError'>: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
args = ('ascii', '\xe2\x80\xa2', 0, 1, 'ordinal not in range(128)')
encoding = 'ascii'
end = 1
message = ''
object = '\xe2\x80\xa2'
reason = 'ordinal not in range(128)'
start = 0
:“ascii”编解码器无法解码位置0:序号不在范围(128)中的字节0xe2
args=('ascii','\xe2\x80\xa2',0,1',序号不在范围内(128)'
编码='ascii'
结束=1
消息=“”
对象='\xe2\x80\xa2'
原因='序号不在范围内(128)'
开始=0
要详细说明我的评论,您可以通过HTTP头告诉浏览器正在以哪种编码传输页面:
内容类型:text/html;字符集=UTF-8
或者使用等效的
标记(位于HTML的
部分):
这样,它应该正确地解释它接收到的UTF-8字符。(text/html
可以替换为更合适的MIME类型。)
至于第一次尝试,使用#-*-编码:utf-8-*-
,我想这是因为Apache不知道如何解释utf-8源文件
再说一次,我对在Apache上运行Python并不十分熟悉,但这可能会有所帮助 你必须阅读,以便对一般问题有所了解
一旦您了解了这一点,那么您应该学习如何在Python中正确处理unicode,我认为以下网站应该是有用的,尽管很长:
无论您做什么,请不要在理解unicode上略过或跳过-否则您将继续遇到微妙的问题
此外,您声明您试图使用.decode('utf-8')——如果python已经/已经/理解数据为unicode,那么这将不起作用——您希望对其进行编码 我不太熟悉Python作为一种web语言,但是如果在请求中发送正确的UTF-8内容类型/字符集HTTP头或等效的HTML元标记,第二种方法可能会正常工作。浏览器可能正在尝试使用ISO-8859-1对其进行解码。正如我所说的,我对这一点很陌生,所以你能举一个这样的元标记或头的例子吗?这实际上与Apache或Mac OS X无关:)只是python和unicode,我建议改为使用这两个标记。我认为这与Apache有关,因为我试着在终端上运行完全相同的脚本,它可以很好地打印出UTF-8字符。好的,我已经试过了。但现在我在主要问题上犯了一个错误。
<meta http-equiv="Content-type" value="text/html; charset=UTF-8" />