2011-12-08 10 views
1

この文字列のエンコーディングをutf-8からukranianに変換しようとしていましたが、 "ÐÑайвÐμÑ-Ð'лÑ-пÑинÑÐμÑа-Pixma-ip- 2000-Ð'лÑ-Windows-7-64-Ð±Ð¸Ñ "となります。 私は壊れた文字列を取得するためにウクライナUTF8から、それを変換するたび...UTF-8をUkranianエンコーディングに変換する

正しい文字列は "Драйвер-для-принтера-Pixmaの-IP-2000-для-Windowsの7-64-бит" のようになります。 .. ..おかげ

EDITをアドバイス

してください:ここで私はそれを変換する方法..です

private string EncodeUTF8toOther(string inputString, string to) 
     { 
      try 
      { 
       // Create two different encodings. 
       byte[] myBytes = Encoding.Unicode.GetBytes(inputString); 

       // Perform the conversion from one encoding to the other.    
       byte[] convertedBytes = Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(to), myBytes); 

       return Encoding.GetEncoding("ISO-8859-1").GetString(convertedBytes); 

      } 
      catch 
      { 
       return inputString; 
      } 
     } 

ウクライナの文字セットは "KOI8-U" である

を詳細情報:私はこの質問に似た問題を抱えています: c# HttpWebResponse Header encoding

ロケーションヘッダーは私にこの破損した文字列を与えています。リダイレクトを実行するために正しくエンコードする必要があります。

+4

どのように変換していますか? –

+1

あなたの文字列は最初から "ÐÑайвÐμ..."のように見えますか?その後、それはすでに壊れています。 – deceze

+0

掲載されていますのでご確認ください。 – SolidSnake

答えて

1

Encoding.Unicodeは、UTF-8ではなくUTF-16です。ソース文字列がUTF-8でエンコードされていることが確かであれば、代わりにEncoding.UTF8を使用してください。

文字列を返しても意味がありません。文字列は常にUTF-16でエンコードされます。文字列を読み書きするときだけエンコーディングについて心配する必要があります。

読み込み時に、Encoding.UTF8.GetStringを使用して、バイナリデータからUTF-16文字列を作成します。

エンコードを指定するには、Encoding.GetEncoding(destinationEncoding).GetBytesを使用してバイナリデータを取得し、直接書き込むか、StreamWriterコンストラクタ(または使用しているオブジェクト)のオーバーロードを使用します。

+0

私はutf8に変更しましたが、まだデータが破損しています... – SolidSnake

+0

何かが間違っていることに気づいた後、私の答えを更新しました。 –

0

ので、同様にあなたは、入力時に適切に文字列をデコードする必要があります。

StreamReader rdr = new StreamReader(args[0], Encoding.UTF8); 
string str = rdr.ReadToEnd(); 
rdr.Close(); 

ストリームは物理的であり、あなたはそれがであるエンコードするかを知る必要があります

文字列、上もう一方は論理的です。 文字列に内部的に使用されるエンコーディングは、あなたの関心事ではありません。 それ以外の文字を表すことはできません。 であり、内部エンコーディングがUnicodeのためすべての文字を表すことができます。 (内部エンコーディングがKOI-8ドイツ語やフランス語の文字だった場合に表現することができませんでした。)

それはあなたがエンコーディングについて再び心配する必要は出力にです。

入力と出力にエンコードを指定しない場合は、プラットフォームのデフォルトが使用されます。 これはあなたが望むものではないかもしれません。 入力と出力のエンコーディングを知り、指定することをお勧めします。

0
"ÐÑайвеÑ-длÑ-пÑинÑеÑа-Pixma-ip-2000-длÑ-Windows-7-64-биÑ". 

すでにUTF-8!あなたは変換を行う必要はありません。 WindowsにUTF-8を知らせるだけです。このようなものが仕事をします:

wb.Encoding = Encoding.UTF8; 
関連する問題