2012-02-19 41 views
1

在我的應用程序中,我從服務器獲取了一些字符串值,但我沒有結束正確的字符串。從服務器對已知UTF-8字符串的解碼不正確

بسيط這是從服務器端的字符串,但我所得到的是بسÙØ·

我試圖測試響應字符串在網上解碼器:

http://www.cafewebmaster.com/online_tools/utf8_encode

這是UTF-8編碼,但我無法解碼iPhone端的字符串。

我接過一看,這些堆棧溢出鏈接作爲參考

Converting escaped UTF8 characters back to their original form
unicode escapes in objective-c
utf8_decode for objective-c

但他們沒有幫助。

回答

0

解決問題從這個鏈接

Different kind of UTF8 decoding in NSString

的NSString *字符串= @ 「بسÙØ·」;

我試圖

[NSString stringWithUTF8String:(char*)[string cStringUsingEncoding:NSISOLatin1StringEncoding]] 

這種方法

謝謝。

+1

這聽起來不像你實際上已經解決了一些問題。我希望你不會因爲這樣的「解決方案」而得到報酬。 – mvds 2012-02-19 20:41:26

+0

@mvds看看我可以通過上述方法解決我的問題,我在這裏發佈這個幫助別人找到相同的解決方案,可能會對別人有所幫助 – Raj 2012-02-19 21:39:21

+0

@mvds這是什麼錯誤,utf8編碼的字符串可以通過使用上述我明確提到,解決方案解決了我的問題,所以你告訴我什麼是這個問題的正確答案?...我ddnt找到任何有用的東西在你的答案!!!!!!!對不起 – Raj 2012-02-20 08:50:45

0

沒有它,就很難說了什麼確鑿的任何來源,但在某些時候你解釋一個UTF-8編碼字符串作爲ISO-8859-1,和(錯誤地)將其轉換爲UTF-8

分析字符串「بسيط」:

  • 原始長度:8
  • 邏輯長度:4個
  • 原始字節:0xD8 0xA8 0xD8 0xB3 0xD9 0x8A 0xD8 0xB7
  • 解釋爲ISO-8859-1(بسÙØ·):0xC3 0x98 0xC2 0xA8 0xC3 0x98 0xC2 0xB3 0xC3 0x99 0xC2 0x8A 0xC3 0x98 0xC2 0xB7

所以在某些時候你應該找到代碼中一些參考ISO-8859-1。找到它並將其刪除。

1

我不從你的問題理解有以下幾點:

  1. 你有沒有在服務器端(我的意思是它的編程)訪問?
  2. 如何向服務器發送和接收數據?

對於第一個問題,我將假設服務器編程爲向您發送UTF-8編碼的文本。

現在在iPhone上,如果你正在使用的插座使用以下發送到服務器:

NSString *messageToSend = @"The text in the language you like"; 
const uint8_t *str = (uint8_t *) [messageToSend cStringUsingEncoding:NSUTF8StringEncoding]; 
[self writeToServer:str]; 

當功能writeToServer是你的功能,將數據發送到服務器。

如果你願意把數據放到一個SQLite3的數據庫使用:

sqlite3_bind_text(statement, 2, [@"The text in the language you like" UTF8String], -1, NULL); 

如果從服務器(再次使用套接字)接收的數據執行以下操作:

[rowData appendBytes:(const void *)buf length:len]; 
NSString *strRowData = [[NSString alloc] initWithData:rowData encoding:NSUTF8StringEncoding]; 

我希望這涵蓋了你需要的所有情況。

相關問題