不确定这是否是一个编程问题。我开始怀疑是这样......但后来我在 Windows 控制台而不是 Cygwin 控制台中运行了有问题的 Java 程序(可执行 jar)......并且它运行良好:输出重音良好,重音输入接受良好。因此以下内容仅适用于 Cygwin 控制台。
我正在处理一些法语文本。当打印重音字符时 (System.out
)而是打印一种“散列框”。我在这里看到了另一个关于此的问题,但没有给出解决方案或正确的解释。
当我输入重音字符时,这些字符会被错误地读取(JavaSystem.in
),例如然后将“bénéfice”打印为“bénéfice”(在正确处理编码的日志中)。
令人困惑的(也许)是我能够在控制台中输入“bénéfice”。据我了解,Deja Vu Sans Mono 字体旨在很好地处理 Unicode。所以...这可能与 Java 有关System.in
and System.out
流???
为了避免疑问,这是 Windows 平台上的 Cygwin(有人在非 Windows 操作系统上使用 Cygwin 吗?)。
我尝试通过“选项”-->“文本”来更改“区域设置”、字符集和字体。这些盒子没有任何改变。
目前设置为默认设置:
字体: Dejavu Sans Mono
区域设置:en_GB
字符集:UTF-8
在命令提示符下,当我去
$ locale
I get
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_ALL=
有人知道我应该做什么吗?
感谢Paul和Zhong Yu在这里的回答。
要打印到 Cygwin,请执行以下操作:
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.print( outputString );
要从 Cygwin 读取数据,请执行以下操作:
BufferedReader br = new BufferedReader( new InputStreamReader(System.in, "UTF-8") );
String nextInputLine = br.readLine();
有点惊讶这个问题在 re Cygwin 之前没有出现过。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)