簡體   English   中英

字符串編碼和表情符號出現問題

[英]Trouble with string encoding and emoji

我在從服務器檢索某些文本消息時遇到了一些麻煩,尤其是在編碼方面。 消息可以來自多種語言(因此,它們可以帶有重音符號,日語),並且可以包含表情符號。

我正在使用帶有一些信息的JSON檢索消息。 這是一些日志示例:

(lldb) po dataMessages
<__NSCFArray 0x14ecc7f0>(
{
    author = "User 1";
    text = "Hier, c'\U00c3\U00a9tait incroyable";
},
{
...
}
)

(lldb) po [[dataMessages objectAtIndex:0] objectForKey:@"text"]
Hier, c'était incroyable

我可以使用來獲取正確的文本:

const char *c = [[[dataMessages objectAtIndex:indexPath.row] objectForKey:@"text"] cStringUsingEncoding:NSWindowsCP1252StringEncoding];
NSString *myMessage = [NSString stringWithCString:c encoding:NSUTF8StringEncoding];

但是,如果消息包含表情符號,則cStringUsingEncoding:返回NULL值。
我在服務器上沒有控制權,因此在向我發送消息之前,我無法更改其編碼。

問題是正確確定編碼。 表情符號不是NSWindowsCP1252StringEncoding的一部分,因此轉換失敗。

而且,您正在經歷不必要的階段。 不要制作中間的C字符串! 只需調用NSString的initWithData:encoding:

就您而言,調用NSWindowsCP1252StringEncoding總是一個錯誤; 我很驚訝這對於任何字符串都有效。 C3A9是Unicode(UTF8)。 因此,只要從一開始就使用intWithUTF8編碼(NSUTF8StringEncoding)調用initWithData:encoding:就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM