Java 多个Unicode块出错
所以我一直在做一些小事情来帮助我做一些数学和显示工作,一切都很好,但是对于控制台输出,我需要能够显示Unicode上标和下标。我最初为上标设置了以下功能:Java 多个Unicode块出错,java,unicode,Java,Unicode,所以我一直在做一些小事情来帮助我做一些数学和显示工作,一切都很好,但是对于控制台输出,我需要能够显示Unicode上标和下标。我最初为上标设置了以下功能: public static String getBase( int num ){ String uniStr = "\\u207"; String numStr = Integer.toString(num); String res = ""; for( int i = 0; i < numStr.le
public static String getBase( int num ){
String uniStr = "\\u207";
String numStr = Integer.toString(num);
String res = "";
for( int i = 0; i < numStr.length(); i++ ){
String s = uniStr + numStr.charAt(i);
char c = (char) Integer.parseInt( s.substring(2), 16 );
res += c;
}
return res;
}
我得到了输出:
ⁱ⁴⁵⁶⁷⁸⁹⁰
¹²³⁴⁵⁶⁷⁸⁹⁰
由于1、2和3的上标在Latin1补充unicode块中具有截然不同的unicode ID,而不是与其他字符一起位于上标/下标块中。因此,我添加了一条switch语句,试图专门处理这3条语句,结果是:
public static String getBase( int num ){
String uniStr = "\\u207";
String numStr = Integer.toString(num);
String res = "";
for( int i = 0; i < numStr.length(); i++ ){
String s = "";
switch(numStr.charAt(i))
{
case '1':
s = "\\u00B9";
break;
case '2':
s = "\\u00B2";
break;
case '3':
s = "\\u00B3";
break;
default:
s = uniStr + numStr.charAt(i);
}
char c = (char) Integer.parseInt( s.substring(2), 16 );
res += c;
}
return res;
}
除了控制台中现在只显示1、2和3,4-0都有无效字符框,如:
¹²³ࢆࢆࢆࢆࢆࢆࢆ
我知道开关可以工作,正如1、2和3正确显示的那样,其他字符的字符串解析也可以工作,但这种情况仍然存在。就我的一生而言,我找不到解决这个问题的办法,甚至找不到理由。如果我使用一个Unicode块中的字符,它是否也试图从该范围中获取所有其他字符,如果是,我能做些什么?这似乎是我能想到的唯一可能的原因,否则我真的很难办。我们将非常感谢您的任何帮助
另外,我将Eclipse中的run Config设置为UTF-8,所有这些字符都受支持对任何好奇的人来说,“Lưu Vĩnh Phúc”是正确的,因为它是Windows控制台的一个问题,而不是。。。在unicode方面不友好。当然有临时补丁可用,但没有特别令人愉快的
第一个我发现这要感谢他在第二条评论中提供的链接,并继续在链接狂潮中在互联网络中蠕动。
埃里克森的这篇文章(基于“爱德华·格雷奇”的一篇)据解释,如果您只计划在本地运行Eclipse控制台,而不需要构建共享项目,则可以将名为JAVA\u TOOL\u OPTIONS
的环境变量设置为JAVA-Dfile.encoding=UTF-8…com.x.Main
,以使其正常工作。虽然不理想,但它确实有效。但是不支持,因此您会面临一些风险
第二个的答案是“蜘蛛”(spider)的回答,它的用户友好度略高一些。这也使用-Dfile
,但在命令行中,而不是将其设置为环境变量,这意味着您可以创建一个整洁的小批处理文件,并使用命令chcp 65001
将windows控制台的默认代码页设置为65001(Unicode)
^控制台输入,引自“spider”。这基本上就是您要修改并添加到run.bat中的内容,该run.bat用于在cmd中运行jar
第三个已打开,由“McDowell”发布,位于下方最底部
将字符打印为UTF-8
此方法涉及操纵控制台以用作文件句柄,并包含一些方便的代码段。问题的可能重复之处在于Windows控制台Unicode支持,而不是Java。Eclipse不需要任何特殊设置就可以使UTF-8输出正常工作。运行配置中的“Encoding”(编码)选项指示分叉进程将选择的编码。
chcp 65001
是一个bastardised UTF-8字符映射。它不支持完整的Unicode映射,输入已中断
¹²³ࢆࢆࢆࢆࢆࢆࢆ
C:\>chcp 65001
C:\>java -jar -Dfile.encoding=UTF-8 path/to/your/runnable/jar