Java 字符编码 深入研究 发现问题若干(1), 求解惑

李大卫 2015-06-09 12:09:49
众所周知, Java采用Unicode编码, 一个字符占用两个字节。
小弟想先搞清楚一点,
>javac -encoding UTF-8 Hello.java
这儿的UTF-8与
System.getProperty("file.encoding") 的结果UTF-8
是个什么关系, 谢谢。
...全文
251 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
finemi 2015-06-09
  • 打赏
  • 举报
回复
javac -encoding UTF-8 Hello.java 指的是Hello.java这个源文件的编码是utf-8,这样编译器才能正确的知道源文件的编码专为class字节码的Unicode System.getProperty("file.encoding") 是获取当前系统的默认编码,他们没有什么关系,硬要说有关系的话,就是 当你javac Hello.java 不指定编码时,默认会采用系统默认编码作为源文件编码,如果他们不一致,显然后面运行java程序则乱码 系统默认的应该是GBK,你这应该是在eclipse或者其他IDE里面运行的结果吧,他们会改变运行环境的编码
李大卫 2015-06-09
  • 打赏
  • 举报
回复
引用 5 楼 finemi 的回复:
没看出你第二个试验是什么意思。。 只要源文件和编译时指定的编码一致,就能够正确保留字符 更深入的理解我也不是很清除咯
finemi 2015-06-09
  • 打赏
  • 举报
回复
没看出你第二个试验是什么意思。。 只要源文件和编译时指定的编码一致,就能够正确保留字符 更深入的理解我也不是很清除咯
李大卫 2015-06-09
  • 打赏
  • 举报
回复
引用 1 楼 finemi 的回复:
javac -encoding UTF-8 Hello.java 指的是Hello.java这个源文件的编码是utf-8,这样编译器才能正确的知道源文件的编码专为class字节码的Unicode System.getProperty("file.encoding") 是获取当前系统的默认编码,他们没有什么关系,硬要说有关系的话,就是 当你javac Hello.java 不指定编码时,默认会采用系统默认编码作为源文件编码,如果他们不一致,显然后面运行java程序则乱码 系统默认的应该是GBK,你这应该是在eclipse或者其他IDE里面运行的结果吧,他们会改变运行环境的编码
没有足够的权限进行编辑, 我手动粘我的试验结果吧, as shown below: ```java // 1 System.out.println("中".getBytes("ISO8859-1").length); // 2 System.out.println("中".getBytes("GB2312").length); // 2 System.out.println("中".getBytes("GBK").length); // 3 System.out.println("中".getBytes("UTF-8").length); // 采用操作系统默认编码 3 System.out.println("中".getBytes().length); ``` 如果在文本环境下 ```java System.out.println("中"); ``` 编译用的命令: >javac -encoding UTF-8 Hello.java 反编译后显示: ```java System.out.println("\u4E2D"); ``` 为什么同样是用UTF-8, 中一会儿显示2个字节, 一会显示3个字节呢?
李大卫 2015-06-09
  • 打赏
  • 举报
回复
引用 1 楼 finemi 的回复:
javac -encoding UTF-8 Hello.java 指的是Hello.java这个源文件的编码是utf-8,这样编译器才能正确的知道源文件的编码专为class字节码的Unicode System.getProperty("file.encoding") 是获取当前系统的默认编码,他们没有什么关系,硬要说有关系的话,就是 当你javac Hello.java 不指定编码时,默认会采用系统默认编码作为源文件编码,如果他们不一致,显然后面运行java程序则乱码 系统默认的应该是GBK,你这应该是在eclipse或者其他IDE里面运行的结果吧,他们会改变运行环境的编码
是的, System.getProperty("file.encoding") 在文本编辑工具编辑后编译运行是GBK,通过eclipse运行是UTF-8,你说的意思, 我总结一下,你看对不对,如果我现在一个java文件采用UTF-8编辑的, 那么我需要javac -encoding UTF-8 Hello.java编译成正确的字节码, 这个时候默认系统编码是GBK, 我运行会显示正确的中文吗? 还有我试验的结果在新编辑的内容里, 你可以看一下。
  • 打赏
  • 举报
回复
感觉一个是文件编码一个是程序编码,这个真不懂

50,713

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧