AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1529639
Accepted
Peter
Peter
Asked: 2020-03-03 04:00:01 +0800 CST2020-03-03 04:00:01 +0800 CST 2020-03-03 04:00:01 +0800 CST

nginx - 文件列表编码搞砸了

  • 772

我在 Windows 10 上使用 nginx 1.17.8。在我设置的配置中autoindex on,它工作正常。但是随后一些带有特殊字符的文件被错误编码/弄乱了:
自动生成的链接Prüfstand.jpg是Pr%FCfstand.jpg,但我需要它是Pr%C3%BCfstand.jpg。

编辑 1:根据以下用户的建议,您需要设置字符集设置。我已经尝试了这些设置(不起作用):

include            win-utf;
source_charset     windows-1251;
charset            utf-8;
override_charset   on;

编辑2:现在我目前坚持使用这些设置,我认为这些设置应该可以正常工作:

charset_map  windows-1251  utf-8 {
    FC  C3BC ; # ü      
}
charset_types    *;
source_charset   windows-1251;
charset          utf-8;
override_charset on;

这些设置正在影响编码。如果我注释掉FC C3BC ;,则 ü 不会正确转换。如您所见,设置处于活动状态。但问题仍然是,自动生成的链接是错误的(Pr%FCfstand.jpg)。我检查了响应标头:

HTTP/1.1 200 OK
Server: nginx/1.17.8
Date: Mon, 02 Mar 2020 19:15:18 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive

他们也很好(charset=utf-8)。这是一个错误还是我做错了什么?
我还发现了这个相关的问题:autoindex list UTF-8 charset in Nginx这似乎很相似。但是作者没有提供足够的信息让我确定这是同一个问题。

windows nginx
  • 1 1 个回答
  • 1097 Views

1 个回答

  • Voted
  1. Best Answer
    Seth
    2020-03-03T23:53:04+08:002020-03-03T23:53:04+08:00

    nginx windows build (1.17.8)的autoindex 模块不支持给它一个编码的任何选项。因此,它将使用它正在读取的数据的基础或受字符集设置的影响。您面临的可能是该模块中的错误。

    在 Windows 上,这通常是具有特定代码页编码的数据,该代码页取决于区域。在这种情况下,nginx 似乎使用了Windows-1251 。其他一些可能相关的编码是 ISO-8859-1、ISO-8859-15、Windows-1252或 UTF-16。

    您已经指出 ü as 的编码FC多次错误,但实际上并非如此。即使在unicode中,它也应该是 FC。碰巧在 UTF-8 中它是C3 BC. 有关更多字符比较,请查看torsten-horn.de: Text-Encoding, Codepage, Charset。如果您启用它,您的帖子中没有包含一条错误消息,该消息会显示在错误日志中:

    ... [crit] 5408#9820: *19 CreateFile() "C:\nginx-1.17.8/html/Prüfstand.txt" failed (1113: No mapping for the Unicode character exists in the target multi-byte code page), client: 127.0.0.1, server: localhost, request: "GET /Pr%FCfstand.txt HTTP/1.1", host: "localhost", referrer: "http://localhost/"
    

    随着 MWE 进一步下降,它也不仅仅是一个简单的 404,而是一个 500。

    该错误暗示了编码问题。您将使用ngx_http_charset_module的一种方法来修复它。您已将其包含在您的编辑中。如果您只定义 asource_charset并且charset您将收到一条错误消息nginx: [emerg] no "charset_map" between the charsets "windows-1251" and "utf-8",并且提供的 win-utf 映射文件不包含您需要的映射。它将 FC 编码为FC D18C ; # small soft sign( ь )。您需要的是Windows-1252地图。

    现在为什么我认为 autoindex 和/或 windows nginx 构建中存在错误?下面基于 nginx Windows build 1.17.8 的默认配置文件的 MWE 执行从 d 到 ü 的转换,并重写链接,http://localhost/Pr%FCfstan%C3%BC.txt但不会触及,%FC尽管它会显示为 ü。副作用是所有 ds 都被替换为 üs。以 word 为例Index。

    worker_processes  1;
    
    error_log  logs/error.log;
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
    
        charset utf-8;
        source_charset windows-1251;
        charset_map  windows-1251  utf-8 {
            64  C3BC; # d -> ü
            FC  C3BC; # ü -> ü
        }
    
        server {
            listen       80;
            server_name  localhost;
    
            location / {
                root html;
                autoindex on;
                index  index.html index.htm;
            }
        }
    }
    

    至少在一种情况下(无法再次找到该链接)有人通过在 Windows 上进行自己的构建而成功。或者,您可以使用例如 PHP 脚本以您想要的方式生成索引。

    • 1

相关问题

  • 批量重命名图像文件集

  • Python 的“pass”参数的批处理等价物是什么?

  • 在 Windows 上与 Docker 守护进程通信

  • Nextcloud 共享在 nginx 反向代理中不起作用

  • 资源管理器侧面板中的桌面外壳快捷方式

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve