中文乱码的问题

写的有些乱  不喜欢 勿喷  。有一点可以肯定的是 每一个场景 没一个过程都是实实在在。

 

场景:

前端 调  java的接口   读写服务器上的配置文件,同时这个文件写入的数据  c的程序也要去读取文件。相当于文件是个数据源,在业务侧起到一个切换场景,工厂模式里面的不同参数的角色。

 

 

问题 :

            1、java的程序用的是第三方的ini4j的 类库直接对文件进行读写。这个库 默认就是utf8 的编码格式 不管是读还是写都是utf-8的字符编码。这个最一开始只是在xshell  显示有问题  前台展示没有问题,c那边读取时乱码。

            2、 改了写入的字符编码 然后 c那边没有问题了,但是前台展示有问题了,同时自己的demo在xshell控制台打印的也是有问题

           3、  把读写强制的加入了 字符编码的格式约束,这个过程花了不少时间,因为最一开始不知道是什么原因。现场c的程序一会读的是乱码,一会不是乱码很烦。用了那个iconf 命令转化也是不行。

           4、 就是把所有的都对齐了 就是前端  java接口  文件编码   服务器编码  c端的编码  最后发现 用cat  和vim  打开是时候两个又是乱码,  还有就是  后面写入的会导致前面的内容是乱码。控制台打印的  时而乱码时而不乱码。把服务器上的文件导下来看也是乱码的。你改过流的编码过后,之前在本地调试的部分瞬间又跑不通了,很是诡异, 瞬间就爆炸了。

 

问题解决的过程:

  服务器上

     创建一个空文件

     用  file  文件名   命令看是 没有编码的  说明:文件的编码主要是针对你输入的流的编码  

     用 服务器上的编辑工具   cat   vim   进行编辑 后

     你会发现 不带中文的文件就是 ASCII 编码 

     带中文的文件就是  ISO8859-1   

     你在服务器上看文件编码大部分都是   ASCII ISO8859-1 尤其是etc下面的配置文件

  本地(window)创建文件  然后传到服务器上(linux)

     本地创建一个用记事本打开的 一个没用中文传到 服务器上  然后用 file  查看 是 ASCII编码  带中文的就是  ISO8859-1

     本地穿件一个用字符编码 uft8  的那么传到服务器不管中英文都还是utf8   这个为什么utf8  作为网络通信常用的原因虽然占的资源多。

     即 除了utf8 服务器和 本地保持一致,其余带中文的服务器上就是ISO8859-1 不带中文的就是  ASCII 

 

===================================下面就是调试测试的============================================

控制读取的字符编码

    InputStreamReader  isr  = new InputStreamReader(new FileInputStream(filePath), "GBK");
    Wini ini = new Wini(isr);

 

控制写入的字符编码

OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(new File(filePath)), "GBK");
ini.store(oStreamWriter);

 

     其它的业务代码就没有贴了 总要是说明一下Inij4j也可以具体的切换不同的字符编码。 (默认的是utf8)尤其是在服务器的时候是其它编码的时候你用其它的去写  这样文件就变成是utf8的格式。  这样很容易出问题。

 

  还有一个问题就是当你的文件原本是utf8 的格式 用utf8 的操作没有问题 ,然后在原来文件的基础上用GBK或者其它的字符集的时候你会发现  上次写入的utf8的东西是乱码。这样就要求你文件是什么格式 那你至始至终就得用什么格式编码,主要是中文他烦,英文貌似不会遇到这样的问题。

 

 

  就是在测试的过程你会发现你文件的,又会各种乱码。这里主要就是  xshell   文件编码  还有就linux环境变量设置和控制的

 

就是说 你服务器文件是iso8859-1  那么你用的xshell终端必须是gbk 系列的编码  看差不会保证不会乱码。如果你文件是iso8859-1  那你xshell终端用utf-8  你不管用 cat  还是vim  都会是乱码的。还有就是你的流输出的是什么编码  必须和环境编码的 LANG d对应起来  有些人说要改  /etc/systemconf/i18n 文件 最近几天貌似和这个对应不起来  就是说 LANG  设置的是zh_un.GK2312  

/etc/systemcon/i18n 设置的对应的是 utf8 的格式 如果你的流是ut8 格式输出的东西在xshell控制台是乱码的。也就是说LANG 是对控制台起决定性作用的。

还有就是上面提到的 对同一个文件 第一次是utf8  第二次  gbk  这样有可能导致之前的uft8 格式写入的东西是乱码,这个时候你不管是用gbk 输出还是utf8 输出  LANG 不管怎么设置也都是乱码, 同时你在 shell改变中段的 字符也是乱码的。也是我就是乱码的  和展示  打印没有关系 换个编码  我只是将这个乱码变成下一个乱码。

 

 

参考资料:

解决中文乱码的问题

https://jingyan.baidu.com/article/ab69b270de8b4f2ca7189f1d.html

解决vim   和用cat  显示乱码的问题。

https://blog.csdn.net/onepiecehuiyu/article/details/75208743

编解码:

https://blog.csdn.net/zhblanlan/article/details/81458943

 

ini4j 编码问题

https://blog.csdn.net/cp1153750171/article/details/81432939

 

注:  参考链接里面的东西 和我验证的对应不起来  因此和我写的有些出入,实际还是根据大家验证的为准, 实际才是检验真理的唯一标准。

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值