file - Nginx:静态文件编码 utf8 字符导致 Ã

标签 file ubuntu utf-8 nginx

我想弄清楚为什么 nginx 会尝试使用错误的编码加载一些静态图像。例如:

来自error.log:

2012/08/08 21:14:46 [error] 17968#0: *71 open() "/home/www/mydomain.com/WEB-INF/images/productimage/image-ø.png" failed (2: No such file or directory), client: x.x.x.x, server: www.mydomain.com, request: "GET /images/productimage/image-%C3%B8.png HTTP/1.1", host: "www.mydomain.com", referrer: "http://www.mydomain.com/"

在我的 nginx.conf 文件中,我添加了以下内容;

source_charset utf-8;
charset utf-8;

但不幸的是,这并没有解决问题。

我的虚拟主机配置文件使用以下内容来提供图像文件;

    location /images/
    {
            alias /home/www/mydomain.com/WEB-INF/images/;
            expires 15d;
    }

我使用的是 ubuntu,LANG 环境变量也是这样设置的;

export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

有什么线索吗?谢谢!

最佳答案

URI 中的百分比编码实际上是两个编码步骤,而不是一个。理想情况下,第一个文本被编码为 UTF-8,UTF-8 文本被“百分比编码”以用于 URI,产生如下结果:

/images/productimage/image-%C3%B8.png

您能否确认此 URI 已正确编码?如果你从你想要的字符开始,然后编码成UTF-8再百分号编码,结果是不是%C3%B8?您可以像这样手动生成百分比编码的脚本:

 $perl -MCGI -e 'print CGI::escape("Hello World")."\n";'
 Hello%20World

换一种说法:你确定问题出在 Nginx 的解码,而不是编码?检查包含图像引用的 HTML 页面的编码。查看 HTTP header 和元标记。确保它明确声明自己为 UTF-8。否则,这可能会导致浏览器错误解释引用。

您同样可以手动测试解码过程,如下所示:

 perl -MCGI -e 'print CGI::unescape("/images/productimage/image-%C3%B8.png")."\n";'
 /images/productimage/image-ø.png

我写了一个detailed post about percent-encoding with Perl ,如果有兴趣作为引用。

关于file - Nginx:静态文件编码 utf8 字符导致 Ã,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11871874/

相关文章:

Linux "file"命令的 Python 模拟

无法从打开的文件中读取

Python 2.7 unicode 再次困惑

c# - HttpUtility.HtmlEncode 不会对所有内容进行编码

iOS 应用程序 : open a file, 将其发送到网络位置,然后返回调用应用程序

c - 使用 fopen() 读取文件无法正常工作

Git 到 GitHub - 无法连接到端口 443 : Connection refused

python - 如何将数据保存到 csv Cantera 和错误 <cantera.composite.SolutionArray object at 0x7f4badca0fd0>

ubuntu - make 总是重建所有目标

PHP:将传入字符串转换为 UTF-8,没有任何信息它是什么编码