gpt4 book ai didi

java - UTF-8 不向控制台打印字符

转载 作者:行者123 更新时间:2023-12-03 11:18:36 27 4
gpt4 key购买 nike

我有以下代码

public class MainDefault {
public static void main (String[] args) {
System.out.println("²³");
System.out.println(Arrays.toString("²³".getBytes()));
}
}
但似乎无法将特殊字符打印到控制台
当我执行以下操作时,我得到以下结果
$ javac MainDefault.java
$ java MainDefault
MainDefaultPrinting
另一方面,当我编译它并像这样运行它时
$ javac -encoding UTF8 MainDefault.java
$ java MainDefault
MainDefaultUTF8CompilationOnly
当我使用文件编码 UTF8 标志运行它时,我得到以下信息
$ java -Dfile.encoding=UTF8 MainDefault
MainDefaultUTF8CompilationAndRun
控制台(Windows 10 上的 Git Bash)似乎没有问题,因为它可以正常打印字符
Echo
谢谢你的帮助

最佳答案

您的代码没有在控制台中打印正确的字符,因为您的 Java 程序和控制台使用不同的字符集、不同的编码。
如果要获得相同的字符,首先需要确定哪些字符集到位。
此过程将取决于您输出结果的“控制台”。
如果您使用的是 Windows 和 cmd ,正如@RickJames 建议的那样,您可以使用 chcp命令来确定 Activity 代码页。
Oracle 提供了 Java 完全支持的编码信息,以及与其他别名的对应关系 - 在这种情况下是代码页 - 在 this 中。页。
This stackoverflow answer 还提供了一些有关 Windows 代码页和 Java 字符集之间映射的指导。
正如您在提供的链接中所见,UTF-8 的代码页是 65001 .
如果您使用的是 Git Bash (MinTTY),您可以按照 @kriegaex 说明验证或配置 UTF-8作为终端模拟器编码。
Linux 和 UNIX 或 UNIX 派生系统(如 Mac OS)不使用代码页标识符,而是使用区域设置。区域设置信息可能因系统而异,但您可以使用 locale命令或尝试检查 LC_*系统变量来查找所需的信息。
这是 locale 的输出我的系统中的命令:

LANG="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_CTYPE="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_ALL=
知道这些信息后,您需要使用 file.encoding 运行您的 Java 程序。对应于正确字符集的 VM 选项:
java -Dfile.encoding=UTF8 MainDefault
一些类,如 PrintStreamPrintWriter , 允许您指示 Charset其中信息将被输出。 -encoding javac选项只允许您指定源文件使用的字符编码。
如果您使用 Windows 和 Git Bash,请考虑阅读此@rmunge answer :它提供有关工具中可能存在的错误的信息,该错误可能是问题的原因,并且会阻止终端在无需手动编码调整的情况下开箱即用。

关于java - UTF-8 不向控制台打印字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63712074/

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