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.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块中具有远远不同的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; } 但现在我得到了输出: 123??????? 除了现在只有1,2和3显示在控制台中的事实,4-0都有无效的字符框,如: 123??????? 我知道交换机工作的事实,正如1,2和3所证明的那样都正确显示,并且其他字符的字符串解析也可以工作,但这仍然会发生.对于我的生活,我无法找到解决方案甚至是理由.如果我使用一个Unicode块中的字符,它是否也试图从该范围中获取所有其他字符,如果是这样,我可以做些什么呢?这似乎是我能想到的唯一可能的原因,否则我很好,真正难倒.任何和所有的帮助将非常感激. 附:我将Eclipse中的运行配置设置为UTF-8,并支持所有这些字符 解决方法
对于任何好奇的人来说,“L?uV?nhPhúc”是正确的,因为它是一个问题,Windows控制台在unicode方面相当……不友好.肯定有温度修复,但没有什么特别令人愉快的.
第一个我发现感谢挖掘他的第二个评论中提供的链接,并继续通过链接狂欢的方式蠕动我的方式. 第二个稍微用户友好,发现here,“蜘蛛”的回答.这也使用-Dfile,但是在命令行中而不是将其设置为环境变量,这意味着您可以创建一个整洁的小批处理文件并使用命令chcp 65001将Windows控制台的默认代码页设置为65001(Unicode). C:&;chcp 65001 C:&;java -jar -Dfile.encoding=UTF-8 path/to/your/runnable/jar ^控制台输入,引自“蜘蛛”.这基本上是你修改并添加到用于在cmd中运行jar的run.bat的内容. 第三个是在this page,由“McDowell”发布,位于最底层
此方法涉及操作控制台以作为文件句柄工作,并具有一些方便的代码片段. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |