2012-05-02 9 views
4

私はutf-8でエンコードされたファイルからデータを読みます。このファイルの内容の一部は、新しく作成されたフォルダの名前として使用されます。しかし、私のフォルダ名は次のとおりです。C#System.IO.Directory.CreateDirectory - utf-8文字でディレクトリを作成しますか?

bohou_120328の代わりに、私は、新しく作成したフォルダの名前のための適切なコーディングを設定するにはどうすればよいbohouš_120328

?ありがとう。

編集:

私は、ファイルからの情報をこのように読んでいます:私は私のWindows 7上で自分のアプリケーションを実行する場合

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); 
           } 

でディレクトリを作成し、64ビットコンピュータ、すべてが問題ありません。私はWinXPのような古いシステムと他のコンピュータ上で実行する場合は、コーディングはちょうど間違っていると、フォルダを作成する変数を使用する前にこの

bohou�_120328 

のように見える、私は私が出力に書き込みますが、すべてが正常です。フォルダ名でさえも問題ありません。しかし、私のコンピュータ上では、残念ながら。

EDIT2

物事はもっと奇妙なっています。発音記号の付いていない名前は私のためにうまくいくので、このコードHow do I remove diacritics (accents) from a string in .NET?を使用して発音区別記号を削除しました。

しかし、再び:

  1. がbohou_120328

に他のコンピュータと私のフラッシュディスクの利回り上のコードを実行しているbohous_120328

  • に私のコンピュータの利回り上のコードを実行している、私はそれがある誓います私の.exeファイルをコピーしたのと同じコード。

    デバッガでは、フォルダを作成する前に問題が既に文字列変数に入っていると表示されます。このケースでは環境が私の​​変数にどのような影響を与えるのか分かりません。

    は、私はあなたが間違ったファイルを読み込んだと思う

  • +3

    コードを表示してみませんか? – Nick

    +0

    'Directory.CreateDirectory(@"Bohouš "); Console.WriteLine( "{0}"、Directory.Exists(@ "Bohouš"));は 'True'を出力します。 – user7116

    +0

    @ニックコードを追加しました。 – Perlnika

    答えて

    4

    :-)説明のために幸せになります。まず読んだテキストをチェックしてください。

    +0

    あなたは正しいです。いくつかのコンピュータでは、ファイルを適切に読み込みます。読書の問題でした。 – Perlnika

    6

    Windowsでは、ファイル名またはディレクトリ名のエンコードを指定しません。 NTFSでは、これらは常に本質的にUTF-16でエンコードされます。文字列を正しく読み込む限り、CreateDirectoryは必要な処理を行います。あなたのUTF-8ファイルをUTF-8として読まなかったか、あなたのファイルが実際にUTF-8ではないと思われます。 CreateDirectoryを呼び出す前に、文字列の値がどのようなものかをデバッガで調べてください。

    1

    私の疑惑は、あなたのコードがテキストをどのように読み込んでいるのか、それがディレクトリ名としてどのように書き出されているのかとは関係ないということです。私はそれがOSやパーティションのタイプの制限であると確信しています。私の推測では、OS /パーティションは分音のある文字を扱うことができないか、正しく書かれているだけですと間違って表示されます。

    この記事は(とにかく、NTFS用)分音文字を可能にするファイルシステムを拡張する方法についていくつかの情報を提供します:

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

    他のパーティションタイプについても同様の情報があるかもしれません(あなたはまだ避難所あなたが使っているパーティションの種類を尋ねるsixlettervariablesのコメントに答えました)。

    1

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

    私は意味:UTF-8 & new StreamReader(path)として

    • ファイル内容:エンコーディングの試合:UTF-8 & new StreamReader(path, Encoding.Default)として無 問題

    • ファイル内容:部分一致を、現在のOSのコードページに対応する文字のみが正しくデコードされます

    • ファイル内容ANSI(Windowsのデフォルト)& new StreamReader(path)として: のミスマッチをコードしている、私の知る限り唯一のASCII文字は

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

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

    1

    StreamReader attempts to detectデフォルトではUTF8を使用しません。

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

    関連する問題