最近项目上遇到了一个问题,就是按照字符串的语言,来采用不同的解码。
例如:汉语“你好”,采用GKB解码,英文“hello”,采用UTF_8解码。
有时候一句话,一个String串里面会有好几种语音,String = “你好hello啊”,就是既有中文又有英语。
直接上代码吧,通过如下方法解码
/**
* 显示中文:采用GBK解码
* 显示英文:采用GBK解码
* 显示俄罗斯:采用GBK解码
* 显示西班牙语:采用GBK解码
*
* 显示阿拉伯语:采用UTF-8解码
* 显示希伯来语:采用UTF-8解码
* 显示土耳其语:采用UTF-8解码
* 显示罗马尼亚语:采用UTF-8解码
* 显示法语:采用UTF-8解码
* @param name
* @return
*/
private static void createCombinationDataFormatConvert(String name) {
Log.d(TAG, "createCombinationDataFormatConvert name == " + name);
int totalNum = 0;
char[] datas = name.toCharArray();
List<Byte> byLists = new ArrayList<Byte>();
for (char data : datas) {
Log.d(TAG, "createCombinationDataFormatConvert data code == " + (int)data + " data == " + data);
if (isChineseChar(data) || isRuChar(data) || isEsChar(data)) {//采用GBK解码
String valueOf = String.valueOf(data);
byte[] gbks = null;
try {
gbks = valueOf.getBytes("gbk");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//noinspection ConstantConditions
for (byte gbk : gbks) {
byLists.add(gbk);
}
} else {
String valueOf = String.valueOf(data);
byte[] utf8s = null;
utf8s = valueOf.getBytes(StandardCharsets.UTF_8);
for (byte utf8 : utf8s) {
byLists.add(utf8);
}
}
}
totalNum = byLists.size();
}
通过如下方法,来判断字符是哪个语言:
//中文
private static boolean isChineseChar(char c) {
return c >= 0x4E00 && c <= 0x9FA5;
}
//俄文
private static boolean isRuChar(char c) {
return c >= 0x0400 && c <= 0x052F;
}
//西班牙语,英文字符的编码范围在 U+0020 到 U+007E 之间
//西班牙语里面就有英文字母
private static boolean isEsChar(char c) {
return c >= 0x0000 && c <= 0x007F;
}
大体思路就是,先把String通过name.toCharArray();获取char数组,然后判断每个字符的char是在哪个语言的编码范围,然后在去根据需求解码即可。