java - ConEmu (CMD) 不能识别这些 unicode 字符?
问题描述
public void print(boolean nextLine, int delayInt, String load) throws UnsupportedEncodingException {
PrintStream p = new PrintStream(System.out, true,"UTF-8");
for(int x = 0; x < load.length(); x++ ){
p.print(load.charAt(x));
try{
Thread.sleep(delayInt);
}catch (Exception ex){
ex.printStackTrace();
}
}
if(nextLine)
System.out.println();
}
好吧,上面是打印字符串中每个字符的方法,我正在使用 PrintStream 因为我觉得它允许我在 ConEmu 中编译和执行 Java 程序时使用所有 Unicode 字符(我使用它而不是 CMD @Windows )
i.print(true, 50,"\n" +
"\n" +
"▓█████▄ ██▓ ██████ ▄████▄ ▒█████ ██▒ █▓ ▓█████ ██▀███ \n" +
"▒██▀ ██▌ ▓██▒ ▒██ ▒ ▒██▀ ▀█ ▒██▒ ██▒ ▓██░ █▒ ▓█ ▀ ▓██ ▒ ██▒ \n" +
"░██ █▌ ▒██▒ ░ ▓██▄ ▒▓█ ▄ ▒██░ ██▒ ▓██ █▒░ ▒███ ▓██ ░▄█ ▒ \n" +
"░▓█▄ ▌ ░██░ ▒ ██▒ ▒▓▓▄ ▄██▒ ▒██ ██░ ▒██ █░░ ▒▓█ ▄ ▒██▀▀█▄ \n" +
"░▒████▓ ░██░ ▒██████▒▒ ▒ ▓███▀ ░ ░ ████▓▒░ ▒▀█░ ░▒████▒ ░██▓ ▒██▒ \n" +
" ▒▒▓ ▒ ░▓ ▒ ▒▓▒ ▒ ░ ░ ░▒ ▒ ░ ░ ▒░▒░▒░ ░ ▐░ ░░ ▒░ ░ ░ ▒▓ ░▒▓░ \n" +
" ░ ▒ ▒ ▒ ░ ░ ░▒ ░ ░ ░ ▒ ░ ▒ ▒░ ░ ░░ ░ ░ ░ ░▒ ░ ▒░ \n" +
" ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░░ ░ ░░ ░ \n" +
" ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ \n" +
" ░ ░ ░ \n" +
"\n"
);
i.print(true, 2, "\n" +
"\n" +
" ▄█ ▄████████ \n" +
"███ ███ ███ \n" +
"███▌ ███ ███ \n" +
"███▌ ███ ███ \n" +
"███▌ ▀███████████ \n" +
"███ ███ ███ \n" +
"███ ███ ███ \n" +
"█▀ ███ █▀ \n" +
" \n" +
" ▄█ ▄█ ▄█ ▀█████████▄ ▄████████ ▄█ ▄████████ ▄█ ▄█▄ ▄█ ▄█ ▄█ \n" +
"███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ▄███▀ ███ ███ ███ \n" +
"███▌ ███▌ ███▌ ███ ███ ███ ███ ███▌ ███ █▀ ███▐██▀ ███▌ ███▌ ███▌ \n" +
"███▌ ███▌ ███▌ ▄███▄▄▄██▀ ▄███▄▄▄▄██▀ ███▌ ███ ▄█████▀ ███▌ ███▌ ███▌ \n" +
"███▌ ███▌ ███▌ ▀▀███▀▀▀██▄ ▀▀███▀▀▀▀▀ ███▌ ███ ▀▀█████▄ ███▌ ███▌ ███▌ \n" +
"███ ███ ███ ███ ██▄ ▀███████████ ███ ███ █▄ ███▐██▄ ███ ███ ███ \n" +
"███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ▀███▄ ███ ███ ███ \n" +
"█▀ █▀ █▀ ▄█████████▀ ███ ███ █▀ ████████▀ ███ ▀█▀ █▀ █▀ █▀ \n" +
" ███ ███ ▀ \n" +
" ▄█ ▄█ ▄█ ▀█████████▄ ▄████████ ▄████████ ▄████████ ▄█ ▄█▄ ▄████████ ▄████████ ▄█ ▄█ ▄█ \n" +
"███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ▄███▀ ███ ███ ███ ███ ███ ███ ███ \n" +
"███▌ ███▌ ███▌ ███ ███ ███ ███ ███ █▀ ███ ███ ███▐██▀ ███ █▀ ███ ███ ███▌ ███▌ ███▌ \n" +
"███▌ ███▌ ███▌ ▄███▄▄▄██▀ ▄███▄▄▄▄██▀ ▄███▄▄▄ ███ ███ ▄█████▀ ▄███▄▄▄ ▄███▄▄▄▄██▀ ███▌ ███▌ ███▌ \n" +
"███▌ ███▌ ███▌ ▀▀███▀▀▀██▄ ▀▀███▀▀▀▀▀ ▀▀███▀▀▀ ▀███████████ ▀▀█████▄ ▀▀███▀▀▀ ▀▀███▀▀▀▀▀ ███▌ ███▌ ███▌ \n" +
"███ ███ ███ ███ ██▄ ▀███████████ ███ █▄ ███ ███ ███▐██▄ ███ █▄ ▀███████████ ███ ███ ███ \n" +
"███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ▀███▄ ███ ███ ███ ███ ███ ███ ███ \n" +
"█▀ █▀ █▀ ▄█████████▀ ███ ███ ██████████ ███ █▀ ███ ▀█▀ ██████████ ███ ███ █▀ █▀ █▀ \n" +
" ███ ███ ▀ ███ ███ \n" +
" ▄█ ▄█ ▄█ ▄████████ ▄████████ ████████▄ ███ █▄ ▄████████ ▄█ ▄█ ▄█ ▄█ \n" +
"███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ \n" +
"███▌ ███▌ ███▌ ███ █▀ ███ █▀ ███ ███ ███ ███ ███ █▀ ███ ███▌ ███▌ ███▌ \n" +
"███▌ ███▌ ███▌ ███ ▄███▄▄▄ ███ ███ ███ ███ ▄███▄▄▄ ███ ███▌ ███▌ ███▌ \n" +
"███▌ ███▌ ███▌ ▀███████████ ▀▀███▀▀▀ ███ ███ ███ ███ ▀▀███▀▀▀ ███ ███▌ ███▌ ███▌ \n" +
"███ ███ ███ ███ ███ █▄ ███ ███ ███ ███ ███ █▄ ███ ███ ███ ███ \n" +
"███ ███ ███ ▄█ ███ ███ ███ ███ ▀ ███ ███ ███ ███ ███ ███▌ ▄ ███ ███ ███ \n" +
"█▀ █▀ █▀ ▄████████▀ ██████████ ▀██████▀▄█ ████████▀ ██████████ █████▄▄██ █▀ █▀ █▀ \n" +
" ▀ \n" +
" ▄█ \n" +
"███ \n" +
"███▌ \n" +
"███▌ \n" +
"███▌ \n" +
"███ \n" +
"███ \n" +
"█▀ \n" +
" \n" +
"\n" +
" \n");
但是在 IDE 上按预期运行,但在 ConEmu 上显示,“testing.java:50:错误:用于编码 windows-1252 的不可映射字符(0x90)”错误我已经检查了解决方案,但它们仅适用于我有'\uXXXX' 字符代码,在这种情况下我没有,因为我使用了在线 ASCII 艺术生成器。 我用过的 ASCII ART Generator
解决方案
根据ConEmu 文档:
UTF-8 (UTF8)
在 Windows 上,与 Unix 不同,控制台本身不是一个“字节”流,而是一个单元格的电子表格,每个单元格都包含一个 UTF-16 字符和一个颜色属性。
这意味着如果您的应用程序使用单字节或多字节字符集(ANSI、OEM、UTF-8 和许多其他字符集)生成输出,Windows 会根据您控制台中选择的活动代码页自动将该输出转换为 UTF-16(运行chcp 从控制台命令提示符检查您的活动代码页)。
如果您想使用 UTF-8 编码,您必须选择 UTF-8 作为活动控制台代码页。只需运行 chcp 65001 命令即可。您可以从 shell 提示符调用此命令,或在 ConEmu 任务内容中的 shell 之前运行它。当然,您的应用程序必须能够使用 UTF-8 输出数据。请参阅您的应用手册。
只需输入您的 ConEmu 终端,您就可以看到 UTF-8 内容:
chcp 65001
您还必须稍微修改源代码并将其保存为 UTF-8 文件:
public void print(boolean nextLine, int delayInt, String load) throws UnsupportedEncodingException {
for(int x = 0; x < load.length(); x++ ){
// Use the regular System.out.print here to output chars!
System.out.print(load.charAt(x));
try{
Thread.sleep(delayInt);
}catch (Exception ex){
ex.printStackTrace();
}
}
if(nextLine)
System.out.println();
}
编译运行脚本:
chcp 65001
java test
推荐阅读
- jquery - jQuery插件分为单独的方法
- ios - 键盘覆盖子视图中的文本字段
- java - 如何将json添加到arraylist?
- node.js - node.js ncp | fs.readdir | 丢失的文件 | 回调的使用
- angular - 如何在Angular 4中的街道地图和卫星地图之间切换
- wordpress - Woocommerce:更新购物车中某些产品的价格
- c - 是否有一种安全的方法来指定一个对象的值可能因为它从未被使用而未初始化?
- ios - 使用 CallKit 的 TokBox 音频会话问题
- c++ - SDL 和 SDL_image 程序在 Eclipse 中什么都不做
- javascript - 如何使用带有 createTextNode() 的列表的第一个子项