2011-07-27 15 views
2

私はUTF8デコードについて多くの検索をしましたが、まだ答えは見つかりませんでした。私はすべての言うことができるNSStringの異なる種類のUTF8デコード

Test message readability is óké 

:私はこのエンコードされたテキストを変更する方法を見つけることができません何らかの方法で

NSString *tempString = @"Test message readability is óké"; 

は、私は私のNSXMLParserからNSStringのUTF-8のデコードを受け取ります私が試したオプションは必要だとは思わない。いくつかの助けてくださいでしたか?

Thnx!

答えて

3

あなたは間違っています。何が欲しいのです:

char *s = "Test message readability is óké"; 
//Note: this is a one-byte-character C string, not an NSString! 
NSString *tempString = [NSString stringWithCString:s encoding:NSUTF8StringEncoding]; 

はまた、あなたは、文字列定数を初期化する際に、どのような実際にメモリをプログラムするために行くことは、現在のファイルのエンコーディングに依存することに注意してください。すでにUTF-8の場合、文字は二重にエンコードされます。文字列Ã、³などをC文字列のUTF8としてエンコードします。

つまり、文字列定数を使用するのは、おそらく間違った動きです。問題をより詳しく説明してください。

+0

はご回答いただきありがとうございます。私は、encoding = "UTF-8"というXMLを受け取ります。要素の1つにéやàなどの文字列が含まれています。しかし、私がブラウザでXMLを開くと、私はすでにこれらの文字を見つけました。事は:私がTextWrangler(textEditorアプリ)のテキストをUTF-8として再び開くと、正しい文字が表示されます。Windows Latin 1として再オープンするのですか?それは私にÃkkを与えます。ああ、あなたの例は動作しません、私はすでに試してみました! – MiiChiel

+0

XMLがUTF8の場合、Windows Latin 1として開くと間違った文字が表示されますが、これは予想されます。問題は、最初にコード*で何を達成しようとしているのですか?文字列リテラル(直接またはC文字列を介して)からNSStringを初期化することは、NSXMLParserが与えるものと同じではありません。ソースファイルのエンコーディングである追加のエンコーディングレイヤがあります。 –

+0

私は他の人から、間違った文字を表示するXMLファイルを取得します。ブラウザでXML URLを開くときに、同じ「間違った」文字が表示されます。文字列またはロードされたXMLStringを正しい文字に変換する方法はありますか? – MiiChiel

4

NSXMLParserは、XMLが指定する文字エンコーディングを使用してテキストを処理します。あなたのケースでは、XMLが明示的にUTF-8を指定していないと思います。

テキストはあなたがXMLを生成するサーバーについては何もできないなら、あなたはこのハックを適用することができますISOラテン1のようだ:

char* tempString = [string cStringUsingEncoding:NSISOLatin1StringEncoding]; 
string = [NSString stringWithUTF8String:tempString]; 

私はこれはからこれをテストして動作することを確認しましたこのような

po [NSString stringWithUTF8String:(char*)[@"Test message readability is óké" cStringUsingEncoding:5]] 
+0

これはうまくいきました!Xcodeは「char」の代わりに「const char *」を使用するよう警告しました。これは私にメモリリークを与えないと思いますか?私はcharを使用することに慣れていません。しかし、私があなたをよく理解していれば、XMLファイルがUTF-8の正しい方法で保存されていないと言っているのでしょうか? – MiiChiel

+0

ここにはリークはなく、 'const'を追加するのが適切です。そして、はい、私はサーバーがどちらの文字エンコーディングが指定されていないか、間違ったエンコーディングを指定していると考えています。 – PeyloW

+0

奇妙な部分は、自分のxmlファイルをphpでエコーしてブラウザに表示すると、正しい文字が表示されますが、それは間違った文字に変更されます... – MiiChiel

1

スタンダート符号化および復号化:GDBプロンプト符号化するための

復号化するための
NSString *content = [bodyTextView.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

NSString *decodedString = [msg.content stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
関連する問題