4

utf-8でエンコードされたファイルからデータを読み取りました。このファイルの内容の一部は、新しく作成されたフォルダーの名前として使用されます。ただし、私のフォルダ名は次のとおりです。

bohouš_120328の代わりにbohou�_120328

新しく作成したフォルダの名前に適切なコーディングを設定するにはどうすればよいですか?ありがとう。

編集:

私はこのようにファイルから情報を読んでいます:

System.IO.StreamReader file = new System.IO.StreamReader(nameOfFile);

 while ((j = file.ReadLine()) != null) { 
    //manipulating string in j
 }

次に、でディレクトリを作成します

if (Directory.Exists(folder) == false) {
                                    Console.WriteLine("creating directory " + folder);
                                    System.IO.Directory.CreateDirectory(@folder);
                                } 

Windows 7、64ビットコンピューターでアプリケーションを実行すると、すべて問題ありません。ただし、WinXPなどの古いシステムを搭載した他のコンピュータで実行すると、コーディングが間違っており、次のようになります。

bohou�_120328

変数を使用してフォルダーを作成する前に、iを出力に書き込みますが、すべて問題ありません。フォルダ名でも問題ありません。しかし、残念ながら、私のコンピューターだけです。

edit2

物事はさらに奇妙になっています。このコードを使用しました。.NETの文字列から発音区別符号(アクセント)を削除するにはどうすればよいですか?発音区別符号のない名前は私にとっては問題ないので、発音区別符号を削除します。

ただし、ここでも:

  1. 私のコンピューターでコードを実行すると、bohous_120328になります
  2. 他のコンピューターでコードを実行すると、フラッシュディスクがbohou�_120328になります

.exeファイルをコピーしたのと同じコードであることを誓います。

デバッガーは、フォルダーを作成する前に、問題が既に私の文字列変数にあると言います。この場合、環境が私の​​変数にどのように影響するかはわかりません。

説明をいただければ幸いです:-)

4

5 に答える 5

6

Windowsでは、ファイル名またはディレクトリ名のエンコーディングを指定しません。NTFSでは、それらは常に本質的にUTF-16でエンコードされます。文字列を正しく読み取っている限り、CreateDirectoryは必要な処理を実行します。UTF-8ファイルをUTF-8として読み取っていなかったか、ファイルが実際にはUTF-8ではない可能性があります。CreateDirectoryを呼び出す前に、デバッガーで文字列値を確認してください。

于 2012-05-02T16:32:33.623 に答える
4

私はあなたがファイルを間違って読んだと思います。最初に読んだテキストを確認する必要があります。

于 2012-05-02T15:32:00.550 に答える
1

私の疑惑は、これはコードがテキストを読み取る方法や、ディレクトリ名として書き出される方法とは何の関係もないということです。ディレクトリを作成しているOSまたはパーティションの種類の制限であると思います。OS/パーティションが発音区別符号付きの文字を処理できないか、正しく書き込まれているのは正しく表示されません。

この記事では、ファイルシステムを拡張して発音区別符号を使用できるようにする方法について説明します(とにかく、NTFSの場合)。

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/fsutil_behavior.mspx

他のパーティションタイプについても同様の情報がある可能性があります(使用しているパーティションタイプを尋ねるsixlettervariablesのコメントにはまだ回答していません)。

于 2012-05-14T16:54:23.627 に答える
1

aのデフォルトのエンコーディングStreamReaderはUTF-8です。ファイルがUTF-8でエンコードされていない場合、ローカライズされたバージョンのオペレーティングシステムで正しい文字を取得できるかどうかはわかりません。

つまり :

  • UTF-8としてのファイルコンテンツ&new StreamReader(path):エンコーディングの一致:問題ありません

  • UTF-8としてのファイルコンテンツ&new StreamReader(path, Encoding.Default):部分一致、現在のOSコードページに対応する文字のみが正しくデコードされます

  • ANSIとしてのファイルコンテンツ(Windowsのデフォルト)&new StreamReader(path):エンコーディングの不一致、AFAIKのみのASCII文字がデコードされます

  • ANSI&:部分一致としてのファイルコンテンツnew StreamReader(path, Encoding.Default)、現在のOSコードページに対応する文字のみが正しくデコードされます

ファイルのエンコーディングとOSのデフォルトのコードページを確認すると、問題を見つけるのに役立つ場合があります。

于 2012-05-15T16:10:19.593 に答える
1

StreamReaderはエンコーディングの検出を試み、デフォルトではUTF8を使用しません。

コンストラクターでEncoding.UTF8を提供することをお勧めします。
これで問題が解決しない場合は、ファイルの内容は実際にはUTF8ではなく、コンピューターの地域設定に依存していると思います。

于 2012-05-16T15:30:15.337 に答える