2012年11月1日 星期四

utf8, c 字串轉換(CLGeoCoder, 地址處理問題)

先來個簡單的 NSString CString 字串轉換

from http://mobiledevelopertips.com/c/converting-between-c-and-objective-c-strings.html

// NSString object to C

NSString *str = @"String object to a C string";

const char *ptr = [str cStringUsingEncoding:NSUTF8StringEncoding];

printf("%s\n", ptr);

// Another approach with the same result

const char *ptr2 = [str UTF8String];

printf("%s\n", ptr2);

// C string to NSString object

ptr = "C string to string object";

str = [NSString stringWithCString:ptr encoding:NSUTF8StringEncoding];

NSLog(@"%@", str);

然後更進一步,解 \uxxxx

NSString *s = [NSString stringWithUTF8String:"\u53f0\u7063 114 \u53f0\u5317\u5e02 \u65b0\u660e\u8def143\u5df7 4\u865f"];

NSLog(@"%@", s);

接下來是 \U

這邊其實有個問題,\U和\u並不相同

\U 是從 json parse 出來的結果

會處理這問題其實是因為取得資料時碰到一點小問題

如下字串:

\U53f0\U7063 114 \U53f0\U5317\U5e02 \U65b0\U660e\U8def143\U5df7 4\U865f

這組字串是從 CLGeocoder 的 FormattedAddressLines 中取出

原型是 NSArray,網路上的簡單處理方法是直接合併取得字串

NSString* ss = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "];

不過這一串到底是怎麼來的我還是搞不清楚..

先在此做個註記,日後繼續處理

沒有留言: