开发者

OS X: Terminal output of javac is garbled

开发者 https://www.devze.com 2022-12-23 11:31 出处:网络
I\'ve got my computer set up in Japanese (hey, it\'s good language practice), and everything is all fine and dandy... except javac.It displays localized error messages out to the console, but they\'re

I've got my computer set up in Japanese (hey, it's good language practice), and everything is all fine and dandy... except javac. It displays localized error messages out to the console, but they're in Shift-JIS, not UTF8:

$ javac this-file-doesnt-exist.java
javac: ?t?@?C??????????܂???: this-file-doesnt-exist.java
?g????: javac <options> <source files>
?g?p?\?ȃI?v?V?????̃??X?g?ɂ??ẮA-help ???g?p???܂

If I pipe the output through nkf -w,开发者_如何转开发 it's readable, but that's not really much of a solution:

$ javac this-file-doesnt-exist.java 2>&1 | nkf -w
javac: ファイルが見つかりません: this-file-doesnt-exist.java
使い方: javac <options> <source files>
使用可能なオプションのリストについては、-help を使用します

Everything else works fine (with UTF8) from the command-line; I can type filenames in Japanese, tab-completion works fine, vi can edit UTF-8 files, etc. Although java itself spits out all its messages in English (which is fine).

Here's the relevant bits of my environment:

LC_CTYPE=UTF-8
LANG=ja_JP.UTF-8

From what it looks like, javac isn't picking up the encoding properly, and java isn't picking up the language at all. I've tried -Dfile.encoding=utf8 as well, but that does nada, and documentation on the localization of the JVM toolchain is pretty nonexistent, at least from Google.

Addendum:

Macports OpenJDK6 has better behavior:

$ /opt/local//share/java/openjdk6_bootstrap/bin/javac this-file-doesnt-exist.java 
javac: file not found: this-file-doesnt-exist.java
Usage: javac <options> <source files>
use -help for a list of possible options


That's a well-known glitch of javac on OS X in Japanese environment. I had done a bit of Google searches myself, and I have found no fundamental cure. For now, the temporary solution I'm using is

javac -J-Dfile.encoding=utf8

which gives the error messages in Japanese encoded in UTF-8. Note that it's not -D, but -J-D. If you want the error messages in English, use

 LC_ALL=C javac -J-Dfile.encoding=utf8

You can always make them into an alias, if you'd like:

 alias javac="LC_ALL=C javac -J-Dfile.encoding=utf8"


What character encodings have you enabled in Terminal? I'm guessing it does not allow the encoding that javac is using. Look under Preferences > Encodings.

0

精彩评论

暂无评论...
验证码 换一张
取 消