为什么我无法在nginx中正常显示CJK字符?

3

环境: Windows 10 + nginx/1.8.0。mysql目录下的所有文件都是UTF-8编码,mysql目录下的所有HTML文件都包含 <meta charset="utf-8" />

我用于文件 nginx.conf 的配置文件:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        charset gbk,utf-8;
        source_charset gbk,utf-8;
        autoindex on;
        location / {
            root   d:/mydoc/build/html;
            index  index.html index.htm;
            charset gbk,utf-8;
            source_charset gbk,utf-8;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

我启动了nginx服务器并在Firefox中打开了mysql目录:

这里输入图片描述

所有CJK字符都正确显示。现在点击第三个标题——mysql日志.html

这里输入图片描述

显示文件error.log以查看发生了什么:
2020/12/05 22:41:19 [error] 11252#11076: *8 CreateFile() "d:/mydoc/build/html/mysql/mysql日志.html" failed
(2: The system cannot find the file specified),
client: 127.0.0.1, server: localhost, request:
"GET /mysql/mysql%C8%D5%D6%BE.html HTTP/1.1", host: "127.0.0.1", referrer: "http://127.0.0.1/mysql/"

在我的Firefox中输入http://127.0.0.1/mysql/mysql日志.html并点击。所有CJK字符都正确显示。

在这里输入图片描述

当单击127.0.0.1/mysql标题时,它跳转到包含乱码CJK字符的网页。 如何解决此问题?

验证了相同目录和文件在nginx + Linux中可以正确显示CJK字符,但在nginx + Windows中却不能。

1个回答

0
根据阿里云指南, 我的最佳猜测是你应该只使用 charset utf-8, 并且还应该检查所有的文件名是否为 UTF-8 格式或者进行转换为 UTF-8 格式(仅针对文件名,不包括内容)。

它是关于Linux+Nginx的,而我所说的是关于Windows+Nginx的,这没有用处。 - showkey
好的,如果你没有Linux机器,那么你应该在Windows中找到相应的工具。你检查了文件名格式吗? - ofirule
所有文件和目录都是在Linux上创建的,文件名和内容都是UTF-8编码。现在的问题是它们在Linux+Nginx环境下可以正常显示,但在Windows10+Nginx环境下无法正常显示。 - showkey
这是巨大的进步,现在听起来似乎是 Windows 版本的nginx中存在bug。请检查您是否同时使用相同版本的Linux和Windows。尝试在Windows上使用最新版本的nginx,如果问题仍然存在,请向nginx团队提交bug:https://trac.nginx.org/nginx/ - ofirule
它们是同一个版本,设置 chcp 936 或 65001 无法解决问题。 - showkey
nginx for windows 被认为是 beta 版本 https://nginx.org/en/docs/windows.html。所以这可能是一个 bug。 - ofirule

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接