2

我在打印特殊字符时遇到问题。如果我想打印一个包含特殊字符的简单字符串,并在浏览器中打开 python 文件,则该字符串不会显示。我试着把

#!/usr/bin/env python3.3
# -*- coding: utf-8 -*-

在所有可能的组合中都处于领先地位 - 没有奏效。我尝试了使用标准输出和使用 .encode('utf8') 对我的字符串进行编码等解决方案。最后一个解决方案对我有帮助,但是我的字符串随后以字节字符串形式呈现,我需要移交 JSON,所以我不想打印带有特殊字符的空白 JSON 字符串。是否有可能是 lighttpd 存在问题,不允许我以 UTF-8 打印?我必须先更改 lighttpd.conf 吗?

Atm 我的配置文件如下所示:

server.modules = (
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
#       "mod_rewrite",
)

server.document-root        = "/var/www"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"

index-file.names            = ( "index.php", "index.html",
                                "index.htm", "default.htm",
                               " index.lighttpd.html" )

url.access-deny             = ( "~", ".inc" )

static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" , ".py")

## Use ipv6 if available
#include_shell "/usr/share/lighttpd/use-ipv6.pl"

dir-listing.encoding        = "utf-8"
server.dir-listing          = "enable"

compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ( "text/plain; charset=utf-8", "text/html; charset=utf-8", "text/css; charset=utf-8", "text/xml; charset=utf-8", "text/javascript; charset=utf-8", "text/x-js", "application/x$
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
4

2 回答 2

0

Python 使用您使用魔术注释声明的编码来解释您的字符串文字。但你只是完成了一半。您的文件必须实际以 utf-8 编码才能正常工作。

使用好的文本编辑器(例如 Notepad++),您可以控制文件在磁盘上的实际编码方式。

请注意,如何检查是否使用了正确的编码是一个雷区:您的字符串可能会经过文件存储,然后是各种表示形式(例如变量、数据库等),然后再发送到浏览器(这涉及到内容-类型声明和潜在的自动检测)。我强烈建议您分别检查所有这些步骤。

于 2013-10-21T20:55:03.580 回答
0

最后我找到了解决方案:

output = message
json.dumps(output)
return output

无法工作:-)

output = message
return json.dumps(output)

是返回json的正确方法。

于 2013-11-10T12:59:40.280 回答