开心一刻

  正睡着觉,然后来了个电话

  对方说:你好,方便面是吗

  我愣了一下,以为是恶作剧

  回了句:我不是,我是火腿肠!

  就挂了电话

  又躺了好一会,忽然琢磨过来......

  不对呀,她好像说的是:你好,方便面试吗?

前提准备

  项目中有这么一块业务

  1、 脚本同步 这一环,是运维同事通过脚本实现的,所以我没去关注

  2、 读取文件并上传 这一环,是我实现的,稳定运行了很长一段时间了,一直没出问题

中文乱码

  直到有一天, 生产环境 出现了异常信息: /data/userData/Rsync 下不存在文件:测试文件.txt

  提示很明显,在目录 /data/userData/Rsync 下,没有找到文件 测试文件.txt

  然后联系运维,让运维去看 本系统 的目录: /data/userData/Rsync 下,文件 测试文件.txt 是否存在

  运维的反馈是文件存在,还发了截图

  并且把文件复制给我了

  然后我将这个文件复制到 测试环境 的 /data/userData/Rsync 目录下, 测试环境 能正常找到文件 测试环境.txt

  那问题出在哪?

问题排查

  后面与同个运维同事沟通了下,了解了整个完整流程的细节:

  其中 CentOS 7 作为 NFS 服务器 ,其系统编码是 UTF-8

  Win 2012 作为 NFS 客户端 ,其系统编码是 GBK (chcp 值 936 表示 GBK)

  我在怀疑是不是 NFS 的问题?

  怎么验证了?

  其实最简单的办法就是看一眼 CentOS 7 目录 /data/userData/Rsync 下是不是有中文名乱码文件即可

  奈何我认为我说清楚了,运维同事也认为他理解了

  结果南辕北辙,我想看的是 CentOS 7 的目录 /data/userData/Rsync ,运维给我看的却是 Win 2012 下的挂载目录 L:

  关键是当时我没发现他给我的截图其实不是我想看的!

  然后我就开始了我的线上环境模拟之旅

  NFS 服务端

   CentOS 7 上搭建 NFS 服务器非常简单

  1、安装 NFS ,执行 yum install -y nfs-utils 即可

  2、对客户端 IP 进行授权

    编辑 /etc/exports ,进行授权配置,例如

     /data/userData/Rsync/ 表示要共享出去的目录,不存在则需要先创建: mkdir -p /data/userData/Rsync

     10.5.108.221 表示客户端 IP 地址,说明共享给谁

     (rw,sync,no_root_squash) 表示授权列表, rw 表示客户端可以读写, sync 表示自动同步, no_root_squash 是什么含义,你们自己去查

    涉及到目录的读写,需要对 /data/userData/Rsync/ 配置合适的读写权限,方便演示就简单点: chmod 777 /data/userData/Rsync/

    编辑好之后,使配置生效,执行命令: exportfs -rv

  3、启动 NFS : systemctl start nfs-server

    开机启动: systemctl enable nfs-server

  4、防火墙放行

    为了演示方便,直接关闭防火墙: systemctl stop firewalld

  NFS 客户端

   WIN 2012 作为客户端,配置起来也很简单

  1、安装 NFS 客户端

     控制面板 ->  程序 ->  启用或关闭 Windows 功能

     添加角色与功能 ,直接连续下一步,直到 服务器角色

    如果在 WIN 2012 上搭建 NFS 服务器,则上面三个框住的需要勾选上,然后进行 安装

    我们目前是搭建客户端,这个地方可以不勾,下一步,来到 功能

    勾选上 NFS 客户端 ,然后进行安装即可

  2、防火墙放行,为了演示方便,直接关闭防火墙

  3、目录挂载

    直接在 cmd 中执行: mount 10.5.108.225:/data/userData/Rsync L:

    不出意外的话,挂载成功

  此时, 我的电脑 会出现一个网络盘

  正常来讲,不会有红叉;不影响效果,先不纠结

  同步

  简单点模拟,直接在 win 2012 上,往挂载盘(网络盘)写文件,文件名是: 测试文件.txt

  在 win 2012 的挂载目录 L: 看,中文没乱码,简直太正常了!

  但是,我们去 CentOS 7 的目录 /data/userData/Rsync/ 看下

  哦豁,换了个马甲,还真不认识了!

  程序去找 测试文件.txt ,怎么找得到嘛

  乱码原因

  这个时候基本能断定问题出在 NFS ,直接 google 下关键字: Window 2012 NFS 中文乱码 就能找到答案

  根因就是:windows 内置的 nfs 支持的编码非常有限,不支持 utf-8

问题解决

  去掉中文

  既然中文有问题,那就干掉中文

  和上游系统协商了下,文件名改成英文,中文乱码自然就不存在了

  有小伙伴可能会有疑问:之前没有中文乱码问题?

  其实你们心里应该有答案了,没错,就如你们所想:这块业务,之前一直没出现中文名的文件!

  升级 window 系统

   win10 可以开启 Beta 版本 ,来支持 UTF-8

  具体可参考:一个小设置,让Win10 NFS正常显示中文UTF-8

  注意看评论区,坑很多,不推荐这种方式

  至于 Windows 系统的其他版本是否支持该配置,大家结合自己的系统去查阅

  第三方 NFS 客户端

  ms-nfs41-client,人家搭建步骤写的很清楚了

  换共享方案

   Samba 就是其中之一,大家可以去查阅并实现

总结

  1、 Windows 自带的 NFS 支持的编码非常有限,竟连 UTF-8 都不支持,会导致中文乱码问题

  2、沟通的时候,一定要清楚的表达自己的意图,要保证人家接收到的信息就是你要表达的信息

Windows NFS 真弱 → 中文乱码导致文件找不到的更多相关文章

  1. 【Git】windows上git命令中文乱码的问题

    windows上git命令中文乱码的问题解决 1.打开git bash快捷方式启动 2.右键 options 3.进入text选项卡,选中中文 和UTF-8 4.应用 测试[中文正常显示] 尝试打开文 ...

  2. windows下git bash中文乱码解决办法

    一.解决办法1:(直接上图) 1.在git bash下,右键 出现下图,选择options: 2.选择“Text” 3.将“Character set”设置为  UTF-8 转:windows下git ...

  3. [转]Git for windows 下vim解决中文乱码的有关问题

    Git for windows 下vim解决中文乱码的问题 原文链接:Git for windows 下vim解决中文乱码的有关问题 1.右键打开Git bash: 2.cd ~ 3.vim .vim ...

  4. Gentoo解决Windows系统txt文本中文乱码问题

    Linux与Windows系统语言编码区别 在Linux操作系统下,我们有时打开在windows下的txt文件,发现在windows下能正常显示的txt文件出现了中文乱码. 出现这种情况的原因为两种操 ...

  5. python在windows系统中打印中文乱码

    转自:http://www.111cn.net/phper/python/58920.htm 中文乱码对于程序开发人员来讲不是什么怪事情了,今天我在使用python打印中文时就出现乱码了,下面我们一起 ...

  6. Windows下的bat中文乱码问题

    起初拿到一个bat文件,我在修改时看到编码是gb2312,我就直接将其转变为了utf8...但是在执行后的黑窗口出现中文乱码问题,最后网上获取帮助是修改编码为ANSI编码,确实不出现乱码了,ANSI是 ...

  7. 解决windows下FileZilla server中文乱码问题

    最利用cuteftppro FTP做文件夹同步,发现中文的文件夹及文件名都出现了乱码问题, 一开始以为是cuteftppro的问题,谷哥度娘找了一堆的解决方案都没有解决乱码问题,真是头疼啊! 后来终于 ...

  8. node转发请求 .csv格式文件下载 中文乱码问题 + 文件上传笔记

    用户无法直接访问后台接口 需要node端转发请求 并将数据以.csv文件格式生成以供客户端下载. 很不幸出现了中文乱码的问题 挖了各种坟帖,下了各种依赖包,csv.json2csv.bufferHel ...

  9. 解决Android4.3版本下,手机短彩接收中文文件名附件,中文名字的附件无法保存(第二步:解决从从数据库中读取附件文件名,并在长按后保存附件时,中文乱码导致的无法保存附件)

    从第一步我们发现,在第一步修改之后,在短彩绘画界面中中文附件名的附件已无法显示,经过打印堆栈我们发现还是中文乱码在作祟.下面我们接着进行分析,这次我们从UI层往逻辑处理层进行分析.首先我们找到保存附件 ...

  10. 解决windows 挂载 nfs 驱动器中 中文乱码问题

    乱码问题,是由于 mount.nfs 命令不支持 utf-8字符集.所以是系统软件支持的问题.在网络上找了很多方案都没能解决. 网上主要有三种方案(1)换解决方案,使用smb 共享,这等于不是解决方法 ...

随机推荐

  1. web字体小于12px的解决办法

    大家都知道,web端的字体在正常情况下,最小只能够是12px; 但是有些时候,可能需要字体小于12px 那么如何解决这个办法了 可以使用css3的缩放属性scale 如果字体的大小是10px; 那么我 ...

  2. 【JS 逆向百例】cnki 学术翻译 AES 加密分析

    关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途 ...

  3. TienChin-课程管理-课程搜索

    后端 新建 CourseVO.java: /** * CourseVO类是一个课程的值对象,用于存储课程的相关信息. * 它包含了课程的名称.类型.适用对象.最低价格和最高价格等属性. */ publ ...

  4. C++ Qt开发:数据库与TableView多组件联动

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TableVi ...

  5. C/C++ 使用CRC检测磁盘文件完整性

    当软件被开发出来时,为了增加软件的安全性,防止被破解,通常情况下都会对自身内存或磁盘文件进行完整性检查,以防止解密者修改程序,我们可以将exe与dll文件同时做校验,来达到相互认证的目的,解密者想要破 ...

  6. Linux文件IO之一 [补档-2023-07-21]

    Linux文件IO 8-1C标准库IO函数的工作流程 ​ 使用fopen函数打开一个文件,之后会返回一个FILE* fp指针,fp指针指向一个结构体,这个结构体是c 标准io库中的一个结构体,这个结构 ...

  7. python排序之快速排序

    快速排序 快速排序是比较常用的一种排序方式,通过递归的方法进行排序 首先使用递归方式我们先要解决两个问题:1找到基准条件 2找到递归条件 基线条件为数组为空或只包含一个元素.在这种情况下,只需原样返回 ...

  8. d3d12龙书阅读----数学基础 向量代数、矩阵代数、变换

    d3d12龙书阅读----数学基础 向量代数.矩阵代数.变换 directx 采用左手坐标系 点积与叉积 点积与叉积的正交化 使用点积进行正交化 使用叉积进行正交化 矩阵与矩阵乘法 转置矩阵 单位矩阵 ...

  9. ESP8266的AT指令模块程序

    最新代码可点击下载:ESP8266 模块代码 和以下代码实现方式不一致,更加自由可控 本段代码只是测试了esp8266作为服务器端使用,没有测试作为客户端使用. 没有超长延时等待或死循环等待AT指令反 ...

  10. 逆天的全排列函数next_permutation()

    next_permutation 是算法库(<algorithm>)里的一个用于求全排列的函数,其定义为 next_permutation(_BidIt _First, _BidIt _L ...