gpt4 book ai didi

java - 多个 Unicode block 错误

转载 作者:搜寻专家 更新时间:2023-11-01 03:48:28 24 4
gpt4 key购买 nike

所以我一直在研究一些小东西来帮助我进行一些数学运算和显示工作,并且一切正常,但对于控制台输出,我需要能够显示 Unicode 上标和下标。我最初使用以下上标函数设置它:

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;
}

这在一定程度上工作得很好,但是当使用以下调用进行调试时:

System.out.println(Unicode.getBase(1234567890));

我得到了输出:

ⁱ⁲⁳⁴⁵⁶⁷⁸⁹⁰

由于 1、2 和 3 的上标在 Latin1-Supplement unicode block 中具有截然不同的 unicode ID,而不是与其他字符一起位于上标/下标 block 中。所以我添加了一个 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 block 中的字符,它是否也试图从该范围中获取所有其他字符,如果是这样,我能做些什么吗?这似乎是我能想到的唯一可能原因,否则我真的很难过。我们将不胜感激任何帮助。

附言我将 Eclipse 中的运行配置设置为 UTF-8,并且支持所有这些字符

最佳答案

对于任何好奇的人来说,“Lưu Vĩnh Phúc”是正确的,因为 Windows 控制台在 unicode 方面相当……不友善。当然有临时修复可用,但没有什么特别令人愉快的。

第一个 我发现这要归功于挖掘他第二条评论中提供的链接,并继续通过链接狂潮在互联网上蠕动。在这里 answer由 erickson(基于 this 由“Edward Grech”撰写)解释说您可以将名为 JAVA_TOOL_OPTIONS 的环境变量设置为 java -Dfile.encoding =UTF-8 … com.x.Main为了让 Eclipse 控制台正常工作,如果你只打算在本地运行它并且不需要构建项目来共享.不理想,但它有效。但是不受支持,因此您要冒一些风险。

第二种稍微好用一些,找到了here ,“蜘蛛”的回答。这也使用 -Dfile,但在命令行中而不是将其设置为环境变量,这意味着您可以创建一个整洁的小批处理文件并使用命令 chcp 65001将 Windows 控制台的默认代码页设置为 65001 (Unicode)。

C:\>chcp 65001
C:\>java -jar -Dfile.encoding=UTF-8 path/to/your/runnable/jar

^控制台输入,引用自“spider”。这基本上就是您要修改并添加到用于在 cmd 中运行 jar 的 run.bat 的内容。

第三个this page上,由“McDowell”发布,在最底部

Printing characters as UTF-8

此方法涉及操纵控制台作为文件句柄工作,并有一些方便的代码片段。

关于java - 多个 Unicode block 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36054746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com