1
gy123 2020-01-13 14:58:15 +08:00 1
jdk 环境会默认根据系统环境设置编码,并且可以修改,所以编程中使用 charset.default 就是跟随系统,或者指定特定编码方式;说错请指正
|
2
lhx2008 2020-01-13 14:59:29 +08:00 1
JVM 里面都是 char 数组,UTF-16 的,和 GBK UTF-8 无关
|
3
lhx2008 2020-01-13 15:00:42 +08:00
转流的话,看 API 吧
|
4
Newyorkcity OP |
5
Newyorkcity OP 再补充一个问题
就上述假设的项目,里面所有文件都是用 GBK 编码保存的嘛,那假设操作系统的默认编码(这个就是网上说的默认编码?)是 UTF8,那么 String s = "中文“,程序运行起来后,能够正确的理解 s 要被赋的值么? |
6
lhx2008 2020-01-13 15:18:57 +08:00 1
@Newyorkcity #4 charset.default 一般是 UTF-8 或者 GBK,socket 的是字节流,你如果用 new PrintWriter 转换 string 到字节流,这里需要 decode,如果你不指定参数,编码用 charset.default
|
7
lhx2008 2020-01-13 15:22:25 +08:00
@Newyorkcity #5 java 命令有参数 -Dfile.encoding=GBK,如果 java 命令不认识你文件的编码,中文会乱码。至于会不会自动识别,我没试过
|
9
guyeu 2020-01-13 15:52:36 +08:00
源代码的编码和运行期的内存毫无关系。
|
10
maokabc 2020-01-13 17:43:26 +08:00 via Android 1
编译后在 class 文件常量池中是 modified utf-8,运行时 String、char 是 utf16,代理对需要使用 2 个 char 表示一个码点。写入流一般包装 DataOutputStream 用 wirteUTF 方法,读取用 DataInputStream 的 readUTF,格式和 class 文件里 utf8 常量一样。源文件编码只能影响到 javac
|