在实际开发中遇到过该问题,发现我获取的字符是中文的十六进制不能直接的转换为中文,实际上电脑中中文的存储是以十六进制的形式
string s = new String("/u6659");之类的可以直接转为中文但有时候从网页上得到的不一定可以直接转为中文!下面的程序可以将该十六进制的转为中文
public class UnicodeToChinese {
private static String DeConsult(String src)
{
String temp = "";
StringBuilder consult = new StringBuilder();
consult.append(src);
while(consult.toString().contains("[")&&consult.toString().contains("]"))
{
if(consult.indexOf("[")>=0)
{
consult.deleteCharAt(consult.indexOf("["));
}
if(consult.indexOf("]")>=0)
{
consult.deleteCharAt(consult.indexOf("]"));
}
}
for(int i = 0 ; i < consult.length()/6;)
{
int location = consult.indexOf("//u");
temp += loadConvert(consult.substring(location,location+6));
consult.delete(location, location+6);
}
return temp;
}
public static String Decode(String s)
{
return DeConsult(s);
}
private static String loadConvert(String theString) {
char aChar;
int len = theString.length();
StringBuffer outBuffer = new StringBuffer(len);
for (int x = 0; x < len;) {
aChar = theString.charAt(x++);
if (aChar == '//') {
aChar = theString.charAt(x++);
if (aChar == 'u') {
// Read the xxxx
int value = 0;
for (int i = 0; i < 4; i++) {
aChar = theString.charAt(x++);
switch (aChar) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
value = (value << 4) + aChar - '0';
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
value = (value << 4) + 10 + aChar - 'a';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
value = (value << 4) + 10 + aChar - 'A';
break;
default:
throw new IllegalArgumentException(
"Malformed //uxxxx encoding.");
}
}
outBuffer.append((char) value);
}
else {
outBuffer.append("//" + aChar);
}
} else
outBuffer.append(aChar);
}
return outBuffer.toString();
}
}
string s = new String("/u6659");之类的可以直接转为中文但有时候从网页上得到的不一定可以直接转为中文!下面的程序可以将该十六进制的转为中文
public class UnicodeToChinese {
private static String DeConsult(String src)
{
String temp = "";
StringBuilder consult = new StringBuilder();
consult.append(src);
while(consult.toString().contains("[")&&consult.toString().contains("]"))
{
if(consult.indexOf("[")>=0)
{
consult.deleteCharAt(consult.indexOf("["));
}
if(consult.indexOf("]")>=0)
{
consult.deleteCharAt(consult.indexOf("]"));
}
}
for(int i = 0 ; i < consult.length()/6;)
{
int location = consult.indexOf("//u");
temp += loadConvert(consult.substring(location,location+6));
consult.delete(location, location+6);
}
return temp;
}
public static String Decode(String s)
{
return DeConsult(s);
}
private static String loadConvert(String theString) {
char aChar;
int len = theString.length();
StringBuffer outBuffer = new StringBuffer(len);
for (int x = 0; x < len;) {
aChar = theString.charAt(x++);
if (aChar == '//') {
aChar = theString.charAt(x++);
if (aChar == 'u') {
// Read the xxxx
int value = 0;
for (int i = 0; i < 4; i++) {
aChar = theString.charAt(x++);
switch (aChar) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
value = (value << 4) + aChar - '0';
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
value = (value << 4) + 10 + aChar - 'a';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
value = (value << 4) + 10 + aChar - 'A';
break;
default:
throw new IllegalArgumentException(
"Malformed //uxxxx encoding.");
}
}
outBuffer.append((char) value);
}
else {
outBuffer.append("//" + aChar);
}
} else
outBuffer.append(aChar);
}
return outBuffer.toString();
}
}