Windows Server 2016缺失Unicode UTF-8区域设置选项,NFS传文件乱码求解
Windows Server 2016 缺失全局UTF-8选项的NFS乱码解决方法
核心前提:Windows 10 1903、Windows Server 2019及后续版本才在区域设置面板中内置“Beta:使用Unicode UTF-8提供全球语言支持”的勾选框,Windows Server 2016内核版本为1607,早于该功能的上线时间,因此默认界面不会显示对应选项,属于系统版本特性,并非设置入口查找错误。
方案1:适配NFS两端的字符集匹配逻辑(无全局系统改动,生产环境优先推荐)
该方式不需要修改Windows全局locale,不会影响现有业务软件运行:
- 调整Ubuntu侧NFS服务配置,支持字符集自动转换:
编辑/etc/default/nfs-kernel-server配置文件,将RPCMOUNTDOPTS参数修改为RPCMOUNTDOPTS="--manage-gids -G utf-8,gbk",重启NFS服务后,服务端可自动适配简体中文Windows NFS客户端默认使用的GBK(代码页936)编码规则,避免UTF-8文件名直接被按GBK解码出现乱码。 - Windows侧挂载NFS共享时明确指定代码页参数:
不要通过图形界面挂载共享,改用命令行执行挂载命令,显式指定字符集编码:mount -o codepage=936,soft,sec=sys \\<Ubuntu服务器IP>\<共享目录路径> <本地挂载盘符>: - 文件内容的乱码无需依赖系统全局转码,在文件打开应用(文本编辑器、办公软件)的编码选择菜单中手动指定UTF-8解码即可正常读取。
方案2:手动解锁Windows Server 2016隐藏的UTF-8全局编码开关
如果需要和Windows 10上的UTF-8全局配置效果完全一致,可以通过注册表修改开启对应能力,不需要升级系统版本:
- 打开注册表编辑器,定位到路径
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage - 修改两个字符串键值的数值数据为
65000.nls:ACP:默认值根据系统语言为c_936.nls(简体中文)或c_1252.nls(英文),修改为65000.nlsOEMCP:默认值同上,修改为65000.nls
- 重启服务器后全局UTF-8编码即可生效,和面板上勾选对应选项的效果完全一致。注意:该改动会影响依赖旧代码页运行的老旧32位业务软件,可能出现软件界面文字乱码,操作前务必备份注册表,非生产环境测试无异常后再上线
方案3:替换第三方NFS客户端规避系统编码限制
如果全局修改或调整NFS配置会影响现有业务流程,可以跳过系统自带NFS客户端:
- 安装支持自定义UTF-8文件名编码的第三方NFS客户端工具,这类工具可在挂载阶段直接指定共享目录的文件名字段编码为UTF-8,完全不依赖Windows系统的全局代码页逻辑,从根源解决文件名乱码问题。
内容的提问来源于stack exchange,提问作者Gs.
相关产品推荐
相关产品推荐

