如何在 java 中将 Ascii 转换为 Unicode?
How to convert Ascii to Unicode in java?
我有一个字符串是半号字体,我想将它转换为全号。我试图使用此代码
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 字符映射到另一组。合适的工具是地图,但您必须使用从 Unicode code charts.
获取的所需转换来填充地图
可能有一些算法方法可以针对特定的子范围执行此操作;您似乎发现了一种适用于(西方)数字的方法。请注意,全角数字占用代码点 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
我有一个字符串是半号字体,我想将它转换为全号。我试图使用此代码
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 字符映射到另一组。合适的工具是地图,但您必须使用从 Unicode code charts.
获取的所需转换来填充地图可能有一些算法方法可以针对特定的子范围执行此操作;您似乎发现了一种适用于(西方)数字的方法。请注意,全角数字占用代码点 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