61

git-bash(Windows 7)でユニコードを機能させるのに問題があります。私は成功せずに多くのことを試みました。ただし、何が原因なのかよくわからないので、間違った方向に進んでいる可能性があります。

cmd.exe のエンコーディングは 'chcp 65001' で unicode に変更できるため、これは可能なはずです。

ここに私が試したいくつかのことがあります(GUIの構成オプションを調べるという明らかな以外に)。

  1. 「.bashrc」に環境変数を設定します。これはLinuxのものだと思うので、これが機能しないのは理にかなっていると思います。「ロケール」コマンドは存在しません。

    export LC_ALL=en_US.UTF-8
    export LANG=en_US.UTF-8
    export LANGUAGE=en_US.UTF-8
    
  2. cmd.exe で開始し、「chcp 65001」でエンコーディングを unicode に変更してから、git-bash を起動します。これにより、ユニコード テスト ファイルを cat しようとすると、アクセス許可が拒否されます。ただし、ユニコードなしでファイルを cat しても問題なく動作します。示されているように、cmd.exe にドロップアウトしても、ファイルを "cat" できます。私のデフォルトのエンコーディング(437)を使用して、bashでファイルをcatできます(許可は拒否されませんが、出力は偽造されます)。

    S:\>chcp 65001
    Active code page: 65001
    S:\>"C:\Program Files (x86)\Git\bin\sh.exe" --login -i
    zarac@TOWELIE /z
    cat /s/unicode.txt
    cat: write error: Permission denied
    zarac@TOWELIE /z
    cat /s/nounicode.txt
    abc
    zarac@TOWELIE /z
    L /s/unicode.txt
    -rw-r--r--    1 zarac    Administ        7 May 18 10:30 /s/unicode.txt
    zarac@TOWELIE /z
    whoami
    towelie\zarac
    zarac@TOWELIE /z
    exit
    Z:\>type S:\unicode.txt
    abc£
    
  3. シェルを起動するときに /U フラグを使用する (if-i-understand-correctly の目的ではないため、機能しないことは理にかなっていますが、Unicode と関係があるため、試してみました)。

    C:\Windows\SysWOW64\cmd.exe /U /C "C:\Program Files (x86)\Git\bin\sh.exe" --login -i
    
  4. 私は Console2 を使用することを好むので、[HKEY_CURRENT_USER\Console] と [HKEY_CURRENT_USER\Console\Git Bash] の下の Windows レジストリに、値が 65001 (10 進数) の CodePage という名前の dword 値を追加してみました。これは、「chcp 65001」を設定して「自動」であることを受け入れるのと同じ効果があるようです。(http://stackoverflow.com/questions/379240/is-there-a-windows-command-shell-that-will-display-unicode-characters)

  5. JPSoftのTCC/LE

  6. PowerCMD

  7. スタックオーバーフロー

  8. ダックダックゴ

  9. ixquick/グーグル

そのため、そのアクセス許可の問題を修正できる場合は、方法 2 が実行可能と思われます。ただし、Console2 を使用できるかどうかは好みますが、ほとんどすべてのソリューションに対してオープンです (主に気の利いたタブ機能のため)。おそらく 1 つの解決策は、SSH サーバーをセットアップしてから、Putty/Kitty を使用してそれに接続することですが、それは間違いです! ; )

PS。git-bash の公式ドキュメントはありますか?

4

8 に答える 8

55

MSYS Git 2.8.0 でも同じ問題に直面しましたが、構成を変更する必要があることが判明しました。

$ git --version

git version 2.8.0.windows.1

私のシステムの Git Bash コンソールのデフォルト設定では、ギリシャ語のファイル名が表示されませんでした。

$cd ~

$ls

AppData/
'Application Data'@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
Links/
'Local Settings'@
NTUSER.DAT
.
.
.
''$'\316\244\316\261'' '$'\316\255\316\263\316\263\317\201\316\261\317\206\316\254'' '$'\316\274\316\277\317\205'@

最後の行には、「My Documents」のギリシャ語訳である「Τα έγγραφά μου」が表示されます。それを修正するために、次の手順に従いました。

  1. 既存のロケール構成を確認してください

    $locale
    
    LANG=en
    LC_CTYPE="C"
    LC_NUMERIC="C"
    LC_TIME="C"
    LC_COLLATE="C"
    LC_MONETARY="C"
    LC_MESSAGES="C"
    LC_ALL=
    

    上記のように、私の場合はUTF-8ではありませんでした

  2. ロケールを UTF-8 エンコーディングに変更します。MINGW タイトル バーの左側にあるアイコンをクリックし、[オプション] を選択し、[テキスト] カテゴリで [UTF-8] 文字​​セットを選択します。デフォルトの「Lucida Console」などの Unicode フォントも選択する必要があります。私の構成は次のようになります。 MinGW ロケール構成

  3. 現在のウィンドウの言語を変更します (今後のウィンドウでは手順 2 の設定で作成されるため、これを行う必要はありません)。

     $ LANG='C.UTF-8'
    
  4. ls コマンドが正しく表示されるようになりました

    AppData/
    'Application Data'@
    Contacts/
    Cookies@
    Desktop/
    Documents/
    Downloads/
    Favorites/
    Links/
    'Local Settings'@
    NTUSER.DAT
    .
    .
    .
    'Τα έγγραφά μου'@
    
于 2016-04-18T11:22:49.150 に答える
10

CharlesB がコメントで述べたように、msysgit 1.7.10 は Unicode を正しく処理します。まだいくつかの問題がありますが、更新によって問題が解決したことを確認できます。

参照: https://github.com/msysgit/msysgit/wiki/Git-for-Windows-Unicode-Support

于 2012-05-18T15:58:30.057 に答える
6

Git 2.1 (2014 年 8 月) で問題が解決しないかどうかを確認します。コミット 617ce96またはKarsten Bleesによるコミット 1c950a5
を参照してください( )kblees

Win32: Unicode コンソール出力をサポート

WriteConsoleWユニコードをコンソールに確実に出力する唯一の方法のようです(奇妙なコードページ変換なしで)。

また、バージョンにリダイレクトvfprintfwinansi.cます。

Win32: Unicode 変換関数を追加

Unicode 変換関数を追加して、Windows ネイティブの UTF-16LE エンコーディングと UTF-8 の間で変換し、その逆に変換します。

レガシーでエンコードされたファイル名を持つリポジトリをサポートするために、UTF-8 から UTF-16 への変換関数は、無効な UTF-8 バイト シーケンスに対しても有効で一意のファイル名を作成しようとするため、これらのリポジトリをエラーなしでチェックアウトできます。

これは、msysgit に既に統合されているもののポートである可能性がありますが、少なくとも Windows バージョンの Git は、これらの改善を含めるためにメインの Git リポジトリ ソース コードから分岐/パッチする必要がないことを意味します。

于 2014-08-02T19:27:58.157 に答える
5
于 2014-08-24T21:53:00.953 に答える