本人看到String类的一个构造方法时很是疑惑
public String(byte[] bytes, String charsetName);
如果我的charseName 16个位的编码方法,而bytes只能是8位的,也就是说这两者是包含关系?bytes数组中不能表示所有的符号?
public String(byte[] bytes, String charsetName);
如果我的charseName 16个位的编码方法,而bytes只能是8位的,也就是说这两者是包含关系?bytes数组中不能表示所有的符号?
一般是用来防止乱码问题,http协议神马的,对传送中文很不支持,所以iso-9001(忘记是不是了) 到 gb2312的转换就需要这个了。
这里的charsetName只是为了告诉转换机制,并不强转。默认还是有值的。
而编码的意思,就是如何去把这个字节数组翻译成对应的字符串。
你传递了什么编码名称,就用什么编码规定去解析这个字符串数组。
然后再返回给你一个以java VM编码格式编码的String对象。
假定bytes是一个长度为12的数组,
比如charset若指定为UTF-16编码,JVM会把这个byte[12]转换成长度为6的一个String
charset若指定为ISO编码,JVM会把这个byte[12]转换成长度为12的一个String
charset若指定为UTF-8编码,JVM会把这个byte[12]转换成长度为4~12的一个String重点是: 得到的字符串长度未必等于byte[]的长度
public String(byte[] bytes,
String charsetName)
throws UnsupportedEncodingException通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于 byte 数组的长度。
当给定 byte 在给定字符集中无效的情况下,此构造方法的行为没有指定。如果需要对解码过程进行更多控制,则应该使用 CharsetDecoder 类。
参数:
bytes - 要解码为字符的 byte
charsetName - 受支持的 charset 的名称
抛出:
UnsupportedEncodingException - 如果指定字符集不受支持
不太明白 楼主的意思