2011-05-27 65 views
0

在我的應用我有一個服務器獲取返回的一些數據。這數據是UTF8編碼格式。所以我的服務器返回以下字符串:問題顯示UTF8性格與目標C

r \ u00f3一切都做得那麼\ u00edt

在我的代碼

我做了以下內容:

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
NSLog(@"%@",responseString); 

輸出爲:

r \ u00f3一切都做得那麼\ u00edt

,它應該是

RO做仰臥

難道我做錯了什麼?

讓我告訴你們,,所有的系統是如何工作的..

我做mysql數據庫的查詢..所有表都UTF8編碼..

header('Content-Type: text/html; charset=utf-8'); 
//THE CONNECTION PART GOES HERE 
mysql_query("SET NAMES 'UTF8'"); 
mysql_query('SET character_set_client=UTF8');  
mysql_query('SET character_set_results=UTF8'); 
mysql_query('SET character_set_connection=UTF8'); 

$query = "select * from table"; 
$out = mysql_query($query); 
$rows = array(); 
while($reg = mysql_fetch_assoc($out)) 
{ 
    $rows[] = $reg; 
} 
print json_encode($rows); 

然後它打印

[:在瀏覽器上下面{ 「類標識碼」: 「8」, 「姓名」: 「R \ u00f3 PIR \ u00e1」, 「local_id」 中: 「10」},{ 「類標識碼」: 「9」,「name」:「r \ u00f3 do S \ueded」,「local_id」:「8」}]

+0

如何分配'responseData'? – 2011-05-27 19:15:55

回答

0

嘗試

NSString *responseString = [NSString stringWithFormat: @"%@", [responseData bytes]]; 
+0

結果是「EXC_BAD_ACCESS」.. =/ – 2011-05-27 18:07:02

1

你肯定responseData是UTF8格式?嘗試十六進制轉儲響應數據並檢查字節。

我應該是這個樣子:

0x72 0xc3 0xb3爲0x20 0x64 0x6f爲0x20 0x53 0xc3 0xAD,將0x74 'R' 'O' '' 'D' 'O' '' 'S' 'I'「T '

我假設'ó'== 0x00f3 unicode點和'í'== 0x00ed unicode點。

我的猜測是,響應數據居然寫着:

「R \ u00f3一切都做得那麼\ u00edt」我想看看生成responseData其中在這種情況下

,我的猜測是,談話從unicode字符串到utfstring不正確或源數據不正確。 '\ uxxxx'看起來像某種類型的unicode點字符串編碼的某種語言字符串文字也許?

+0

Shane ..謝謝你的回答..我想responseData是UTF8,因爲所有服務器端都被配置爲輸出UTF8 ..看看編輯過的問題..我可以在服務器上做錯事..我不知道.. 在此先感謝! – 2011-05-30 20:44:00

+0

您更新的問題可以確認我的答案。您的字符串以JSON編碼。縱觀JSON,它會將unicode點(我假設在ascii範圍之外)編碼爲'\ uXXXX'格式。 http://www.json.org/fatfree.html您需要解碼JSON字符串才能手動或使用某個庫來獲取正確的unicode字符串。 – 2011-05-30 22:12:10