ターミナルフォルダに外国語の名前を持つファイルがいくつかあります。端末で ""すると、ls
下の画像の右側にリストが表示されます。
こうやったところ、ls -t | tail -n +2
以下のように実際のキャラクターが見えました。
2枚目の写真のオリジナルキャラクターファイル名のリストをcsvファイルとして書きたいですか?これを行う方法はありますか?ここで非常によく似た質問を見つけましたが、この質問のファイル名は外国語ではありませんでした。使うとこんな感じです。ls -t | tail -n +2 > files.csv
ただし、元の名前に基づいて既存のファイルからメタ情報を取得する必要があるため、元の名前を含むリストが必要です。ここで、ファイル名は順序がなく、ファイル数が異なります。
MobaXtermからターミナル設定に移動すると、文字セットはUTF-8(エンコード)として選択されます。また、UTF-8が見えることを確認しました。
~$ locale -a
C
C.UTF-8
POSIX
答え1
このファイル名はUTF-8でエンコードされているようです。端末はUTF-8ですが、ロケールはそうではありません。 (ASCIIとも呼ばれます)のようなものをlocale charmap
出力できます。ANSI_X3.4-1968
ASCII は、コードポイントが 127 より高い文字を定義しません。非ASCII UTF-8文字はすべて2バイト以上でエンコードされ、すべて127より大きいです。
ls
?
これらのバイトは、ASCII(現在のロケール文字マップ)で印刷可能な文字を形成しないため、次のようにレンダリングされます。
文字がUTF-8にマップされるロケールを使用する必要があります。あなたのリストに書くことができる報告によると、locale -a
.localesだけが残っていますC.UTF-8
。
ランニング:
export LANG=C.UTF-8
locale
$LC_XXX
一部の変数が別のものに設定されている場合は、設定を解除する必要があります。
Microsoft 製品は、文字で始まらない限り、UTF-8 ファイル自体を認識できない場合がありますZERO WIDTH NO-BREAK SPACE
(UTF-16 ではバイト順表示としても使用され、UTF-8 ではバイト順序に問題はありません).
この文字を追加して行末をMicrosoft形式に変換できます。
unix2dos -m < file.csv > file.ms.csv