2013-03-04 23 views
5

F0 A4 AD A2としてUTF-8で表示される漢字があります。この文字は、ここで説明されていますhttp://en.wikipedia.org/wiki/UTF-8C#:バイトからUTF-8文字列への変換。それはなぜ機能しないのですか?

U + 24B62 F0 A4のAD A2

を私はC#でこのコードを実行すると...

byte[] data = { 0xF0, 0xA4, 0xAD, 0xA2 }; 
string abc = Encoding.UTF8.GetString(data); 
Console.WriteLine("Test: description = {0}", abc); 

...私はに出力をリダイレクトしますテキストファイルを開き、notepad.exeでUTF-8エンコーディングを選択して開きます。私は出力を得ることを期待しますが、2つの疑問符(?)を取得しますか?

バイトシーケンスが正しいです。だから私の質問があり、私は

を取得し、出力では

print "\xF0\xA4\xAD\xA2"; 

:これはPerlを作品私が得るのですか、なぜ "??" C#の「」の代わりに?

P.S.このキャラクターには特別なものはありません。キャラクター(2,3,4バイト長)には同じものがあります。

+2

を、「出力」で、あなたは、あなたがテキストファイルに出力をリダイレクトし、メモ帳で開く意味ですか? – yoozer8

+0

UTF8エンコーディングを使用してファイルに書き込むことを確認する必要があります。ファイルに書き込むためのコードを投稿できますか? –

+0

ファイルを使用できない特別な理由はありますか?コンソールとUnicodeはやや面倒です。 Oleksandr Pshenychnyy答え(+1)はこの場合あなたを助けるかもしれません... –

答えて

3

をファイルに出力を書く方が良いでしょう。下のコードは、あなたがそれを行う方法を示しています。メモ帳で作成されたファイルを開くと、文字が正しく表示されます。Perlの場合

string c = ""; 
var bytes = Encoding.UTF8.GetBytes(c); 
var cBack = Encoding.UTF8.GetString(bytes); 
using (var writer = new StreamWriter(@"c:\temp\char.txt", false, Encoding.UTF8)) 
{ 
    writer.WriteLine(cBack); 
} 
+0

ヤコブ、ありがとう、それは助け! – Racoon

+0

@Racoon:喜んで助けることができます:-) –

+0

コンソールでこれを行うには? – Paul

13

コンソールでは、デフォルトでUnicode文字を表示できません。 ASCIIのみが表示されます。 Unicodeを表示できるようにするには、次のコードを使用してください:

Console.OutputEncoding = System.Text.Encoding.Unicode 

ただし、WindowsのコマンドラインではUnicode自体がサポートされないため、ほとんどのOSではが失敗します。

ので、テストの目的のためにあなたがUTF8を使用してファイルに記述する必要が

+0

コンソールアプリケーションでエンコーディングを設定できる場合は、コマンドプロンプトが起動したときにエンコーディングを設定する必要があります。私は出力がもちろんファイルにリダイレクトされるべきであるという意見に同意しない。 –

+1

このコマンドは、例外を生成します。汎用例外ハンドラ:System.IO.IOException:パラメータが間違っています。 tpam_multibyte.Program.Main(文字列[]にSystem.Console.set_OutputEncoding(符号化値)でSystem.IO .__ Error.WinIOErrorでSystem.IO .__ Error.WinIOError(のInt32のerrorCode、文字列maybeFullPath) (AT ) args) – Racoon

+0

私が言ったように、それはWindowsコンソールがユニコードをサポートしていないので、Windows OS(少なくともWindows 7まで)で失敗します。だからあなたはそのエラーを受けているのです –

関連する問題