老生常谈的问题了,记录一下以便他人翻阅。
结论:
1.
字符串与byte数组的转换 默认编码是采用系统的编码(例如Windows下是GB18030)
2.
java类文件中本身包含的字符串,采用什么编码是 根据javac编译时的环境变量决定的。
穿插一下:
重复一下http中的中文乱码问题,例如使用prototype.js发送包含中文的ajax报文时,Servlet接收端可能会遇到乱码问题。该情况可以用以下api解决:
ServletRequest.setCharacterEncoding
ServletResponse.setCharacterEncoding
程序代码:
/**
*
* @author csbison
*/
public class BTest {
private final static char[] hexDigits = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
/**
* @param args
*/
public static void main(String[] args) {
// 测试证明, 字符串与byte数组的转换,默认就是用系统平台的
try {
String src = "诺基亚";
String value = null;
value = bytesToHexString(src.getBytes());
System.out.println("Default=" + value);
value = bytesToHexString(src.getBytes("ISO-8859-1"));
System.out.println("ISO-8859-1=" + value);
value = bytesToHexString(src.getBytes("GBK"));
System.out.println("GBK=" + value);
value = bytesToHexString(src.getBytes("UTF-8"));
System.out.println("UTF-8=" + value);
System.out.println("/////////////////////////");
byte[] aa = "诺基亚".getBytes();
System.out.println(new String(aa));
System.out.println(new String(aa, "GBK"));
System.out.println(new String(aa, "ISO-8859-1"));
System.out.println(new String(aa, "UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static final String bytesToHexString(byte[] buf) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
int n = buf[i];
if (n < 0) {
n = 256 + n;
}
int d1 = n / 16;
int d2 = n % 16;
sb.append(hexDigits[d1]);
sb.append(hexDigits[d2]);
}
return sb.toString();
}
}
Windows上的测试结果:
Default=c5b5bbf9d1c7
ISO-8859-1=3f3f3f
GBK=c5b5bbf9d1c7
UTF-8=e8afbae59fbae4ba9a
/////////////////////////
诺基亚
诺基亚
?¦Ì?¨´??
ŵ��
Linux上的测试结果:
1.
在Locale=zh的情况下,javac,然后再java执行。结果如下:
-bash-3.00$ java BTest
Default=c5b5bbf9d1c7
ISO-8859-1=3f3f3f
GBK=c5b5bbf9d1c7
UTF-8=e8afbae59fbae4ba9a
/////////////////////////
诺基亚
诺基亚
???ù??
???
2.
在Locale=C的情况下,直接java执行(也就是java文件还是在Locale=zh的环境下编译的)。结果如下:
-bash-3.00$ java BTest
Default=3f3f3f
ISO-8859-1=3f3f3f
GBK=c5b5bbf9d1c7
UTF-8=e8afbae59fbae4ba9a
/////////////////////////
???
???
???
???
3.
在Locale=C的情况下,javac,然后再java执行。结果如下:
-bash-3.00$ java BTest
Default=c5b5bbf9d1c7
ISO-8859-1=c5b5bbf9d1c7
GBK=3f3f3fa8b43f3f
UTF-8=c385c2b5c2bbc3b9c391c387
/////////////////////////
诺基亚
???
诺基亚
???
关于对字符编码的问题,可以参考:
http://www.utf.com.cn/article/s320 UTF-8 字符集基础(1)
http://www.phpweblog.net/XBOX/archive/2008/09/06/5726.html
http://javajiao.iteye.com/blog/151995
[待继续整理和增加]
分享到:
相关推荐
java 中关于字符串的笔记,超级详细,在培训中心整理的
java中文乱码字符集解决大全
java字符集编码乱码详解
NDK开发之C语言调用Java构造方法、父类方法、返回中文字符串乱码问题案例详细解析。
网上很多描述java解压中文乱码的问题,很多描述不全.由于工作需要整理出一个完整版.简单实用.下载后请从ZipUtil.java的main方法开始,一目了然. public static void main(String args[]) { new ZipUtil().unZip("E:\\...
java过滤器 字符乱码 乱码 java乱码 过滤器
Java字符串学习笔记,比较系统的讲解了Java的字符串知识
java 统计指定文件中的字符个数 java 统计指定文件中的字符个数
impala的substr()和substring()函数是不支持中文的,创建一个udf解决impala sql中substr()函数截取中文字符串乱码的问题
免费_java中文乱码字符集解决大全里面详细介绍了java的各种乱码问题
利用字符间的转化把汉字转化为英文字符主要应用于提取汉字的首字母等要求
本文档是Xingyu在Android软件开发过程中的随手笔记,主要对字符串的一些常规用法作了随手记录,以备后忘,没什么技术含量, 对初学者有一定参考作用,高手就不要下了。
自己有空时用java反射写的json转化工具,有不完善之处,多包涵
java中文乱码字符集.pdf
java 只显示文件中指定的字符 java 只显示文件中指定的字符 java 只显示文件中指定的字符
JAVA连接字符串到配置文件
Java Web程序开发中字符乱码的原因与解决办法
winform的字符串转换乱码解决
sftp解决上传中文乱码,sftp.setFilenameEncoding("GBK");修改是不起作用的,修改源码后重新导出的jar包。
Java Web程序开发中字符乱码的原因与解决办法.pdf