linux乱码,文件名乱码、文件内容乱码,JDK编码。 CKFinder文件名称乱码 (使用UTF-8解决)

我遇到一个问题,CKFinder后台获取到的文件名是问号。

肯定是编码问题。

第一步,修改jdk编码

(目标读取到正确的文件名称。验证方法输出文件名到日志文件,下载日志到本地确定不乱码)

解决方法tomcat bin目录下新增:

setenv.sh

Java代码 

 

  1. export JAVA_OPTS="-server -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8"  

默认情况下,得到系统编码(Ubuntu  openjdk):

Java代码 

 

  1. # java -jar sysProp.jar  | grep encoding                                          
  2. file.encoding.pkg: sun.io  
  3. sun.jnu.encoding: ANSI_X3.4-1968  
  4. file.encoding: ANSI_X3.4-1968  
  5. sun.io.unicode.encoding: UnicodeLittle  

  

加上虚拟机参数后:

Java代码 

 

  1. # java -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8 -jar sysProp.jar  | grep encoding  
  2. file.encoding.pkg: sun.io  
  3. sun.jnu.encoding: UTF-8  
  4. file.encoding: UTF-8   
  5. sun.io.unicode.encoding: UnicodeLittle  

  

编码解释:

  1. sun.jnu.encoding   影响文件名
  2. file.encoding  影响文件内容

 附录sysProp.jar 的代码:

Java代码 

 

  1. package pp.Main;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.util.Iterator;  
  6. import java.util.Properties;  
  7.   
  8. public class Main {  
  9.     public static void main(String[] args) throws IOException {  
  10.         Properties p = System.getProperties();  
  11.         Iterator<Object> keys = p.keySet().iterator();  
  12.         while(keys.hasNext()){  
  13.             String key=keys.next().toString();  
  14.             System.out.println(key+": "+System.getProperty(key));  
  15.         }  
  16.         String name="newfile_新文件";  
  17.         System.out.println(name);  
  18.         File f=new File(name);  
  19.         if(f.exists()){  
  20.             f.delete();  
  21.         }  
  22.         f.createNewFile();  
  23.     }  
  24. }  

设置好后,CKFinder得到的文件名在日志里显示正常,设置之前是问号。但是文件名称还是问号。

第二步,修改操作系统的编码。

(目标sysProp.jar新建的文件名能够正确显示 )

设置字符编码   vi /etc/environment  添加下面两行

Java代码 

 

  1. PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"  
  2. LANG="zh_CN.UTF-8"  
  3. LANGUAGE="zh_CN:zh:en_US:en"  

关键的一步:使用locale-gen命令添加中文字符编码(命令执行后需要耐心等待几分钟)。

Java代码 

 

  1. #locale-gen zh_CN.UTF-8  

执行成功后,重启

执行java -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8 -jar sysProp.jar

然后ls 将正确看到中文显示。

Java代码 

 

  1. ....  
  2. sun.cpu.isalist:  
  3. newfile_新文件  
  4. root@ippcom:~# ls  
  5. index.html  newfile_新文件  sysProp.jar  

 

 注意一定要用支持UTF-8的ssh客户端,例如putty

参考

http://kang36897.blog.163.com/blog/static/17047373201331111224630/

http://blog.csdn.net/cuker919/article/details/8233821

http://www.linuxidc.com/Linux/2014-02/96939.htm

转载至https://www.iteye.com/blog/bnmnba-2384582

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值