1

中国語の文字列「哈哈」をclojureで印刷しようとしていました。実行環境は Windows 7 ですcmd.exe。デフォルトのコード ページは CP936(GBK) です。cmd.exeを実行するだけで、「哈哈」が正しく表示された状態で GBK エンコードされたソース ファイルを表示できますtype core.clj

のコード ページを 65001 に変更cmd.exeして UTF-8 を有効にできることはわかっていますが、知りたいことは次のとおりです。

  1. cmd.exeJava プログラムを使用してWin7 で GBK 文字を印刷しようとするのはばかげていますか?
  2. Clojure で GBK エンコーディングを使用して文字列を「生成」できますか?

私は leiningen を使用してプロジェクトをセットアップしました。project.cljファイルは次のとおりです。

(defproject fibo "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]]
  :jvm-opts ["-Dfile.encoding=utf-8"]
  :main fibo.core)

ソースコードは次のとおりです。

(ns fibo.core
  (:gen-class))

(defn -main
  [& args]
  ;; work around dangerous default behaviour in Clojure
  (alter-var-root #'*read-eval* (constantly false))
  (println "哈哈"))

出力は次のようになります。

D:...\_dev\fibo> lein run
????

また、lein runJAVA_OPTION -Dfile.encoding=xxxを設定してから呼び出してみました。残念ながら、UTF-8 / GBK / GB18030 / ANSI / CP936のどれも役に立ちません????

明確にする 1 つのこと: _JAVA_OPTION を使用して file.encoding を変更しようとしたとき:jvm-opts ["-Dfile.encoding=utf-8"]、同時に使用しませんでした。上記のエンコーディングをすべて試した後、運が悪かったので、:jvm-optsデフォルトのエンコーディングとして UTF-8 を使用して project.clj を追加しました。

4

1 に答える 1

1

ソースファイルのエンコードに依存します。はい、Java に GBK を使用するのはなんとなく…ばかげていると思います。私のファイルはUTF-8でエンコードされています。win7とUbuntuでテストすると、どちらも正常に表示されます。clojure は Java に基づいており、Java は常に GBK を適切に処理しないため、常に UTF-8 を使用することをお勧めします。GBK を使用する必要がある場合は、一部の Java 関数を使用して GBK と UTF-8 の間で変換できます。

于 2013-08-13T09:39:00.927 に答える