Cygwin 编码困难
Cygwin encoding difficulties
不确定这是否是编程问题。我开始怀疑是这样......但后来我 运行 Java 有问题的程序(可执行 jar)在 Windows 控制台而不是 Cygwin 控制台中......它 运行 很好:输出口音很好,带口音的输入也很好。所以以下内容仅适用于 Cygwin 控制台。
我正在处理一些法语文本。当打印重音字符 (System.out
) 时,会打印一种 "hashed box"。我在这里看到另一个问题,但没有给出解决方案或适当的解释。
当我输入重音字符时,这些字符被错误地读入 (Java System.in
),例如"bénéfice" 然后打印出来(在正确处理编码的日志中)为 "bénéfice".
令人费解的(也许)是我能够在控制台中输入 "bénéfice"。据我了解,Deja Vu Sans Mono 字体旨在很好地处理 Unicode。所以...这可能与 Java System.in
和 System.out
流有关吗???
为避免疑义,这是 Windows 平台上的 Cygwin(有人在非 Windows OS 平台上使用 Cygwin 吗?)。
我尝试通过选项 --> 文本更改 "Locale" 和字符集和字体。这些框没有任何变化。
目前设置为默认设置:
字体:Deja Vu Sans Mono
语言环境:en_GB
字符集:UTF-8
在命令提示符下,当我去
$ locale
我明白了
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();
有点奇怪,在重新Cygwin之前没有提出这个问题。
不确定这是否是编程问题。我开始怀疑是这样......但后来我 运行 Java 有问题的程序(可执行 jar)在 Windows 控制台而不是 Cygwin 控制台中......它 运行 很好:输出口音很好,带口音的输入也很好。所以以下内容仅适用于 Cygwin 控制台。
我正在处理一些法语文本。当打印重音字符 (System.out
) 时,会打印一种 "hashed box"。我在这里看到另一个问题,但没有给出解决方案或适当的解释。
当我输入重音字符时,这些字符被错误地读入 (Java System.in
),例如"bénéfice" 然后打印出来(在正确处理编码的日志中)为 "bénéfice".
令人费解的(也许)是我能够在控制台中输入 "bénéfice"。据我了解,Deja Vu Sans Mono 字体旨在很好地处理 Unicode。所以...这可能与 Java System.in
和 System.out
流有关吗???
为避免疑义,这是 Windows 平台上的 Cygwin(有人在非 Windows OS 平台上使用 Cygwin 吗?)。
我尝试通过选项 --> 文本更改 "Locale" 和字符集和字体。这些框没有任何变化。
目前设置为默认设置:
字体:Deja Vu Sans Mono
语言环境:en_GB
字符集:UTF-8
在命令提示符下,当我去
$ locale
我明白了
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();
有点奇怪,在重新Cygwin之前没有提出这个问题。