请教一下 Java 如何把一个 String 转成 GBK 编码?
我想把一个中文的 String 转换成 GBK 编码,因为 Java 默认编码是 unicode,所以我想 new String(unicode.getBytes(“GBK”))应该就可以了。 但是这个方法转换 “中文”后的文件用 GBK 格式打开显示的是: 锟斤拷锟斤拷。 我另外用 iconv 转换的文件用 GBK 格式打开就是正常的。请问这是为什么?
我想把一个中文的 String 转换成 GBK 编码,因为 Java 默认编码是 unicode,所以我想 new String(unicode.getBytes(“GBK”))应该就可以了。 但是这个方法转换 “中文”后的文件用 GBK 格式打开显示的是: 锟斤拷锟斤拷。 我另外用 iconv 转换的文件用 GBK 格式打开就是正常的。请问这是为什么?
/**
* 将原正确编码的字符串 src 转化为 srcCharset 的字符串
*
* 前提是: 确保原字符串的编码是无损的(完整的). 无需知道原字符串的具体编码, 转化为目标编码的字符串由 Java 库自动实现,无需自己手动实现.
* 如果原字符串不能转化为目标编码,将会抛出 UnsupportedEncodingException
* @param src
* @param srcCharset
* @param destCharset
* @return
*/
public static String convertEncodingString(String src, Charset srcCharset, Charset destCharset){
byte[] bytes = src.getBytes(srcCharset);
return new String(bytes, destCharset);
}
/**
* 将编码为 srcCharset 的字节数组 src 转化为编码为 desCharset 的字节数组
* @param src
* @param srcCharSet
* @param destCharset
* @return
*/
public static byte[] convertEncodingBytes(byte[] src, Charset srcCharSet, Charset destCharset){
String s = new String(src, srcCharSet);
return s.getBytes(destCharset);
}
public static String byteToHex(byte… byteArr){
if (byteArr == null || byteArr.length == 0){
return “”;
}else {
StringBuilder sb = new StringBuilder();
String tmp = null;
for (byte b : byteArr) {
tmp = Integer.toHexString(b);
//byte 进行运算时,会自动转化为 int,否则可能会出错
if (b >>> 31 == 1) {
//最高位为 1, 负数
sb.append(tmp.substring(6));
} else {
//最高位为 0,正数
if (tmp.length() < 2){
sb.append(‘0’);
}
sb.append(tmp);
}
sb.append(‘ ‘);
}
//delete last space
sb.deleteCharAt(sb.length() – 1);
return sb.toString();
}
}
}
你的需求很简单,就是把一个字符串保存为 GBK 的文本。那你写文件流的时候指定一下二进制的编码,如 GBK 就可以了