linux下File.createNewFile(“中文文件名”) 乱码问题

问题描述

我今天遇到了一个中文乱码的问题,虽然现在貌似解决了,但我想了很久没想明白。希望大家帮我支支招,让我搞明白这是啥原因。 我的疑问是我的java我的java源文件是用utf-8保存的在solaris机器上也是用utf-8进行编译的为什么执行的时候 String newp = new String(path.getBytes("utf-8"),encoding)生成的文件名反而是乱码 改成String newp = new String(path.getBytes("gbk"),encoding)就能显示正常的中文? 为什么?这个gbk是从哪来的? 太郁闷了,大家有知道的请告诉我,感谢! 代码如下  public static void main(String[] args) throws InterruptedException { System.getProperties().list(System.out); System.out.println("******************"); final String encoding = System.getProperty("file.encoding"); System.out.println("encoding:"+encoding); String path= "./哈haha哈AAA璎玥.txt"; System.out.println(path); // TODO file.encoding=iso8859-1 try { String newp = new String(path.getBytes("gbk"),encoding); System.out.println(newp); File file = new File(newp); boolean b = file.createNewFile(); System.out.println("file create:"+b); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }   代码的文件编码 在eclipse里面选的是utf-8 然后我将该文件ftp传到solaris机器上 查看solaris机器上jdk的版本$ java -versionjava version "1.5.0"Java(TM) 2 Runtime Environment, Standard Edition (build pap64dev-20100813 (SR12 FP1 ))IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64 j9vmap6423-20100808 (JIT enabled)J9VM - 20100629_60535_BHdSMrJIT  - 20100623_16197_r8GC   - 20100211_AA)JCL  - 20100813     $ localeLANG="zh_CN.UTF-8"LC_COLLATE="C"LC_CTYPE="C"LC_MONETARY="C"LC_NUMERIC="C"LC_TIME="C"LC_MESSAGES="C"LC_ALL=$   指定utf-8 对源文件进行编译 $ javac -encoding utf-8 FileTest.java   用javap查看一下$ javap -verbose FileTestCompiled from "FileTest.java"public class FileTest extends java.lang.Object  SourceFile: "FileTest.java"  minor version: 0  major version: 49  Constant pool:const #1 = Method       #29.#40;        //  java/lang/Object."<init>":()Vconst #2 = Method       #41.#42;        //  java/lang/System.getProperties:()Ljava/util/Properties;const #3 = Field        #41.#43;        //  java/lang/System.out:Ljava/io/PrintStream;const #4 = Method       #44.#45;        //  java/util/Properties.list:(Ljava/io/PrintStream;)Vconst #5 = String       #46;    //  ******************const #6 = Method       #47.#48;        //  java/io/PrintStream.println:(Ljava/lang/String;)Vconst #7 = String       #49;    //  file.encodingconst #8 = Method       #41.#50;        //  java/lang/System.getProperty:(Ljava/lang/String;)Ljava/lang/String;const #9 = class        #51;    //  java/lang/StringBuilderconst #10 = Method      #9.#40; //  java/lang/StringBuilder."<init>":()Vconst #11 = String      #52;    //  encoding:const #12 = Method      #9.#53; //  java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;const #13 = Method      #9.#54; //  java/lang/StringBuilder.toString:()Ljava/lang/String;const #14 = String      #55;    //  ./?haha?AAA??.txtconst #15 = class       #56;    //  java/lang/Stringconst #16 = String      #57;    //  gbkconst #46 = Asciz       ******************;const #47 = class       #79;    //  java/io/PrintStreamconst #48 = NameAndType #80:#81;//  println:(Ljava/lang/String;)Vconst #49 = Asciz       file.encoding;const #50 = NameAndType #82:#83;//  getProperty:(Ljava/lang/String;)Ljava/lang/String;public FileTest();  Code:   Stack=1, Locals=1, Args_size=1   0:   aload_0   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V   4:   return  LineNumberTable:    line 6: 0 public static void main(java.lang.String[])   throws java.lang.InterruptedException;  Code:   Stack=4, Locals=6, Args_size=1   12:  ldc     #5; //String ******************   14:  invokevirtual   #6; //Method java/io/PrintStream.println:(Ljava/lang/String;)V   17:  ldc     #7; //String file.encoding   19:  invokestatic    #8; //Method java/lang/System.getProperty:(Ljava/lang/String;)Ljava/lang/String;   22:  astore_1   23:  getstatic       #3; //Field java/lang/System.out:Ljava/io/PrintStream;   26:  new     #9; //class java/lang/StringBuilder   29:  dup   30:  invokespecial   #10; //Method java/lang/StringBuilder."<init>":()V   33:  ldc     #11; //String encoding:   35:  invokevirtual   #12; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;   38:  aload_1   39:  invokevirtual   #12; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;   42:  invokevirtual   #13; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;   45:  invokevirtual   #6; //Method java/io/PrintStream.println:(Ljava/lang/String;)V   48:  ldc     #14; //String ./?haha?AAA??.txt   50:  astore_2   51:  getstatic       #3; //Field java/lang/System.out:Ljava/io/PrintStream;   54:  aload_2   55:  invokevirtual   #6; //Method java/io/PrintStream.println:(Ljava/lang/String;)V   58:  new     #15; //class java/lang/String   61:  dup   62:  aload_2   63:  ldc     #16; //String gbk   65:  invokevirtual   #17; //Method java/lang/String.getBytes:(Ljava/lang/String;)[B   68:  aload_1   69:  invokespecial   #18; //Method java/lang/String."<init>":([BLjava/lang/String;)V  // 太长显示不了,删除掉  }  运行代码 注意 我未指定 –Dfile.encoding=”utf-8”而是默认 iso8859-1$ java FileTest.The java class is not found:  FileTest.$ java FileTest-- listing properties --java.assistive=ONjava.runtime.name=Java(TM) 2 Runtime Environment, Stand...ibm.signalhandling.rs=falsesun.boot.library.path=/usr/java5_64/jre/binjava.vm.version=2.3com.ibm.oti.configuration=scarjava.vm.vendor=IBM Corporationjava.vendor.url=http://www.ibm.com/path.separator=:java.vm.name=IBM J9 VMuser.country=USjava.vm.specification.name=Java Virtual Machine Specificationuser.dir=/data/zhjk/ISS_HOME/data/test-ouyjava.runtime.version=pap64dev-20100813 (SR12 FP1 )java.fullversion=J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64 j9...java.awt.graphicsenv=sun.awt.X11GraphicsEnvironmentos.arch=ppc64com.ibm.vm.bitmode=64java.io.tmpdir=/tmp/com.ibm.util.extralibs.properties=line.separator= java.vm.specification.vendor=Sun Microsystems Inc.user.variant=java.awt.fonts=os.name=AIXsun.java2d.fontpath=java.jcl.version=20100813sun.jnu.encoding=ISO8859-1java.library.path=/usr/java5_64/jre/bin:/usr/java5_64/j...jxe.current.romimage.version=9com.ibm.oti.vm.bootstrap.library.path=/usr/java5_64/jre/bincom.ibm.cpu.endian=bigjava.specification.name=Java Platform API Specificationjava.class.version=49.0ibm.system.encoding=ISO8859-1invokedviajava=java.util.prefs.PreferencesFactory=java.util.prefs.FileSystemPreferences...os.version=6.1com.ibm.oti.vm.library.version=23user.home=/data/zhjkuser.timezone=java.awt.printerjob=sun.print.PSPrinterJobjava.specification.version=1.5file.encoding=ISO8859-1java.class.path=.user.name=issjava.vm.specification.version=1.0java.home=/usr/java5_64/jresun.arch.data.model=64java.specification.vendor=Sun Microsystems Inc.ibm.signalhandling.sigint=trueuser.language=encom.ibm.oti.jcl.build=20100528_1023java.vm.info=J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64 j9...java.version=1.5.0java.ext.dirs=/usr/java5_64/jre/lib/extsun.boot.class.path=/usr/java5_64/jre/lib/vm.jar:/usr/jav...jxe.lowest.romimage.version=9java.vendor=IBM Corporationfile.separator=/java.compiler=j9jit23sun.io.unicode.encoding=UnicodeBigibm.signalhandling.sigchain=true******************encoding:ISO8859-1./?haha?AAA??.txt./哈haha哈AAA璎玥.txtfile create:true$   结果 生成的文件名是中文的 ok  问题补充:<div class="quote_title">chen_yongkai 写道</div><div class="quote_div">你开发和编译的机器的系统编码是GBK吧</div><br /><br />我是在Windows xp的环境下编写的java文件<br />文件保存格式在eclipse里面设置的是 utf-8

解决方案

你是用的ssh到linux去执行编译的吧,这个ssh客户端也是有编码指定的,应该是你的这个编码和系统不一致导致的。如果你在编译的时候不指定编码的话,生成的文件名应该有问题吧。
解决方案二:
不行再试试用native2asciiC:Usersj>native2ascii中文文件名u4e2du6587u6587u4ef6u540dFile file = new File("./u4e2du6587u6587u4ef6u540d.txt"); boolean b = file.createNewFile();
解决方案三:
直接用File file = new File("./哈haha哈AAA璎玥.txt"); boolean b = file.createNewFile(); 应该就可以了
解决方案四:
你开发和编译的机器的系统编码是GBK吧

时间: 2024-10-25 07:50:38

linux下File.createNewFile(“中文文件名”) 乱码问题的相关文章

linux下mutt发送中文邮件乱码解决方法

首先,mutt的安装 1 yum -y install sendmail 2 #需要安装sendmail并开启防火墙的25端口,如果你需要收邮件110端口也要开 3 yum -y install mutt 二.配置信息 关于配置信息,有一点需要说明的,网上很多教程都说,编辑/root/.muttrc以修改配置文件,我想说的是,我在安装完成之后, /root目录下并没有 .muttrc 这个隐藏文件,你可以从其它地方复制过来,或者自己新建一个文件.这里我是复制的. 你可以通过find命令找到Mut

linux中文文件名乱码怎么解决?

  由于安装英文版的系统不支持中文,出现中文文件名乱码. 下面操作时在centos上安装中文支持: 1)先下载并安装两个语言包: fonts-chinese-3.02-12.el5.noarch.rpm fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm   #rpm -ivh fonts-chinese-3.02-12.el5.noarch.rpm #rpm -ivh fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm 或者 #y

lftp,gFTP和virgoFTP中文文件名乱码解决方案

今天风信网带大家来了解一下linux中FTP服务经常遇到的中文文件名乱码问题,主要针对三种常用的FTP程序来解决,分别是lftp,gFTP和virgoFTP. lftp官方:http://lftp.yar.ru/ 源码包下载地址如下: lftp-4.4.0.tar.gz (2429 kB), lftp-4.4.0.tar.bz2 (1813 kB), lftp-4.4.0.tar.xz (1395 kB) (Yaroslavl, Russia) LFTP是一款非常著名的字符界面的文件传输工具.支

Oracle8i在linux下的安装(中文)

oracle|中文 Oracle8i在linux下的安装(中文)  转摘自flyfox的站点  发布时间:2001年01月04日  详细信息:准备工作--安装Oracle服务器 我认为Microsoft Windows是个不错的操作系统,它在市场方面获得了空前的成功,并造就了盖茨.巴尔默等百亿富翁.它简单易用,得到了广泛地普及,几乎每个计算机爱好者都会操作Windows,几乎每个程序员都会Windows编程.目前为了占领市场,排挤Linux,Windows2000在PC的预装费用从以前Windo

通过freemarker生成一个word,解决生成的word用wps打开有问题的问题,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表

 通过freemarker制作word比较简单 步骤:制作word模板.制作方式是:将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名改成ftl文件(要注意的是生成xml格式要是2003格式的xml,也就是说拿到的word模板得是2003格式的,否则用wps打开word将会出现问题)   详细步骤如下: 模板制作(将要动态显示的数据打上标记,这个标记是freemarker中的EL标记,要注意的是,要控制值为空的情况,下面${(si

nginx下无法访问中文文件名

  方法一: 搞了大半天nginx下无法访问中文文件名的问题,现在看来是secureCRT的问题? 看来还是字符集的问题了. 看来nginx不需要象apache那样要单独加载支持中文模块. 服务器端字符集如下 [root@test]# locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8″ LC_NUMERIC="en_US.UTF-8″ LC_TIME="en_US.UTF-8″ LC_COLLATE="en_US.UTF-8

tomcat下java程序读取文件名乱码

问题描述 tomcat下java程序读取文件名乱码 我的系统运行环境是FreeNAS9.2(可以参考FreeBSD).TOMCAT6.JAVA7,我在系统的一个目录下放了很多文件,文件名都是中文的,但是在tomcat下部署了一个web项目,web项目读取这些文件并把这些文件的文件名输出到一个文件,但是出现下图的乱码.但是我在系统里放几个本地文件,跑java本地程序(java test),这样输出到文件就不出现乱码,不知道有没有大神知道这个问题,求指导

nginx下无法访问中文文件名的解决方法

今天在网上寻找关于Nginx访问中文目录及文件名的解决方法,偶然看到qwqg的一篇文章!解决问题的思路很清晰,特转载过来与大家一起分享!该方法还没有亲自测试,所以不太确定是否真有用! 方法一: 搞了大半天nginx下无法访问中文文件名的问题,现在看来是secureCRT的问题?看来还是字符集的问题了.看来nginx不需要象apache那样要单独加载支持中文模块. 服务器端字符集如下[root@test]# localeLANG=en_US.UTF-8LC_CTYPE="en_US.UTF-8″L

php上传中文文件名乱码问题处理方案_php实例

php上传文件是最最基础的一个技术点,但是深入进去也有不少问题需要解决,这不,上传中文文件后,文件名变成了乱码. 下面是问题代码,很简单: 1.问题代码 html部分: 复制代码 代码如下:  <html>  <body>  <form action="upload_file.php" method="post"  enctype="multipart/form-data">  <label for=&q