如何在java中将Ascii转换为Unicode



我有一个字符串是半大小字体,我想把它转换成全大小。我试图使用这个代码

final String x = "01589846";
String b = "";
System.out.print("01589846");
int y = 0;
final char[] list = x.toCharArray();
for (int i = 0; i < list.length; i++) {
y = Integer.parseInt(String.valueOf(list[i]));
final char unicode = (char) (y + 65296);
b += unicode;
}
System.out.println(b);
}

它确实有效,但它只适用于数字。有人有别的办法吗?请帮帮我!!!!!

Java字符串Unicode。他们不需要转换。Java本身并不使用ASCII。

您显然希望将一组Unicode字符映射到另一组。合适的工具是Map,但您必须使用从Unicode代码图表中获得的所需转换来填充Map。

对于特定的子范围,可能有一些算法方法可以做到这一点;你似乎发现了一种适用于(西方(数字的方法。请注意,全宽数字占用代码点0xFF10到0xFF19,因此转换公式为digit - '0' + 0xff10。0xFF10是65296十进制,但十六进制更清晰,因为它是已发布的代码图表中使用的。

事实上,在我看来,同样的东西适用于SPACE到"~"范围内的所有角色,可能是故意的。因此

for (int i=0; i<list.length; i++)
list[i] += 0xff00 - ' ';

在这里,我只是假设list只包含SPACE到"~"范围内的字符,即对应于图形(可打印(ASCII字符的Unicode范围。处理其他字符,例如片假名,涉及更多。

final String x = "012345 abcdef ABCDEF";
System.out.println(x);

String b = "";
final char[] list = x.toCharArray();
for (int i = 0; i < list.length; i++) {
if(Character.isDigit(list[i])) {
b += (char)(list[i] - 48 + 0xFF10);
} else if(Character.isUpperCase(list[i])) {
b += (char)(list[i] - 65 + 0xFF21);
} else if(Character.isLowerCase(list[i])) {
b += (char)(list[i] - 97 + 0xFF41);
} else if(Character.isWhitespace(list[i])) {
b += list[i];
} else {
b += (char)(list[i] - 33 + 0xFF01);
}
}
System.out.println(b);  

输出:

012345 abcdef ABCDEF
012345 abcdef ABCDEF

最新更新