系统字符集对Java程序的影响

Linux 下 LANG 环境变量

常用的几个LANG 值

export LANG=en_US.UTF-8    # 英文 UTF-8编码
export LANG=zh_CN.UTF-8    # 中文 UTF-8编码
export LANG=zh_CN.GB18030  # 中文 GB18030编码
export LANG=C              # ascii 编码 unset LANG 或者 LANG 为空等同此种情况
export LANG=POSIX          # ascii 编码 等同 LANG=C

对Java程序,字符串在java内存中总是按unicode编码存储的,系统字符集会影响到字节流=>字符流字符流=>字节流的转换

InputStream -> Reader
Writer -> OutputStream
String -> bytes
bytes -> String
// 获取系统默认字符集
System.getProperty("file.encoding");  // 中文windows 下默认是GBK
Charset.defaultCharset();  (import java.nio.charset.Charset)


// 以 UTF-8 读取文件
FileInputStream fis = new FileInputStream("d:\\input.txt"); 
InputStreamReader reader = new InputStreamReader(fis, "UTF-8"); 


String encoding = "UTF-8";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Writer output = new OutputStreamWriter(baos, encoding); // 指定从字符流转换成字节流时的字符编码
// 如果不指定字符编码则使用默认的字符编码,也就是LANG中设置的

String.getBytes(charset)

new String(bytes, charset)

参考资料

  1. http://liuzhiji.bokee.com/671...
  2. https://stackoverflow.com/que...
  3. https://superuser.com/questio...
  4. https://docs.oracle.com/javas...

openmartin
71 声望3 粉丝

古典占星 。师从台湾杨国正老师。|| 占星看盘请私信。|| 伟大的灵魂都是雌雄同体 || 开放心态,契约精神


« 上一篇
maven 初步