跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教一下 Java 里的字符串编码问题。。。老生常谈了
未分類
24 3 月 2020

请教一下 Java 里的字符串编码问题。。。老生常谈了

请教一下 Java 里的字符串编码问题。。。老生常谈了

資深大佬 : Newyorkcity 56

假设有一个 java 项目,它的所有文件都按 GBK 编码保存。

有这样一行代码

String s = “中文”;

那么当程序运行起来后,JVM 中,s 的编码是什么样的?(对网上说的环境默认的编码不太理解,这里的环境是指什么? JVM ? windows10 ?)

然后如果我们在这个项目里加一些最简单的 socket 相关的代码,比如获得 socket 的输出流,将 s 输出。那么在输出流里,s 的编码是什么样的?

谢谢指点!

大佬有話說 (10)

  • 資深大佬 : gy123

    jdk 环境会默认根据系统环境设置编码,并且可以修改,所以编程中使用 charset.default 就是跟随系统,或者指定特定编码方式;说错请指正

  • 資深大佬 : lhx2008

    JVM 里面都是 char 数组,UTF-16 的,和 GBK UTF-8 无关

  • 資深大佬 : lhx2008

    转流的话,看 API 吧

  • 主 資深大佬 : Newyorkcity

    @gy123
    @lhx2008
    额。。我怎么感觉你们两说的有冲突。。。。charset.default 一般就是 utf-16 ?
    另外 java 代码所在的文件用什么编码格式保存与实际运行时 JVM 中的字符串编码完全没关系么?

    @lhx2008
    转流的话看 API 能具体说说么,就比如我就很单纯地调用 write 方法,不传任何编码格式的要求的参数,会如何呢?

    谢谢

  • 主 資深大佬 : Newyorkcity

    再补充一个问题

    就上述假设的项目,里面所有文件都是用 GBK 编码保存的嘛,那假设操作系统的默认编码(这个就是网上说的默认编码?)是 UTF8,那么 String s = “中文“,程序运行起来后,能够正确的理解 s 要被赋的值么?

  • 資深大佬 : lhx2008

    @Newyorkcity #4 charset.default 一般是 UTF-8 或者 GBK,socket 的是字节流,你如果用 new PrintWriter 转换 string 到字节流,这里需要 decode,如果你不指定参数,编码用 charset.default

  • 資深大佬 : lhx2008

    @Newyorkcity #5 java 命令有参数 -Dfile.encoding=GBK,如果 java 命令不认识你文件的编码,中文会乱码。至于会不会自动识别,我没试过

  • 資深大佬 : lhx2008

    @lhx2008 #6 decode -> encode 打错了

  • 資深大佬 : guyeu

    源代码的编码和运行期的内存毫无关系。

  • 資深大佬 : maokabc

    编译后在 class 文件常量池中是 modified utf-8,运行时 String、char 是 utf16,代理对需要使用 2 个 char 表示一个码点。写入流一般包装 DataOutputStream 用 wirteUTF 方法,读取用 DataInputStream 的 readUTF,格式和 class 文件里 utf8 常量一样。源文件编码只能影响到 javac

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具