2011-11-15 23 views
6

Tôi đang tạo một ứng dụng trò chuyện với máy chủ nodejs bằng cách sử dụng ổ cắm và JSON và vì iOS 5 có NSJSONSerialization riêng nên tôi nghĩ đó có thể là con đường dẫn đến theo. Trước đây, tôi đã sử dụng thư viện yail nhẹ.NSJSONSerialization và Unicode, sẽ không phát độc đáo cùng nhau

Dù sao, sau khi chuyển đổi sang NSJSONSerialization tôi bắt đầu gặp phải vấn đề với mã hóa, trước khi thay đổi, nhân vật Ö sẽ gửi độc đáo đến máy chủ và ngược lại, vẫn đang được Ö, nhưng bây giờ, NSJSONSerialization lá Ö vẫn trong unicode char tức là \U00f6.

Đọc tài liệu nói rằng các đối tượng JSON được chuyển đổi thành UTF8 theo mặc định. Và khi tôi chuyển đổi phản hồi từ máy chủ sang NSString đơn giản, Ö hiển thị như mong đợi, nhưng nó vẫn còn trong JSON tất nhiên.

Xin hãy giúp tôi với suy nghĩ của bạn và vì vậy, tôi có nên quay trở lại yail hoặc sử dụng NSJSONSerialization tích hợp không?

Cảm ơn bạn, Simon

+0

Bạn có thể giải thích cách bạn đã xác định rằng 'NSJSONSerialization' vẫn để lại' \ U00f6' trong các chuỗi kết quả không? Trong thử nghiệm của tôi, nó giải mã chính xác thành 'ö'. Bạn có chắc là bạn không nhầm lẫn giữa biểu diễn '-description' mặc định của kết quả' NSDictionary'/'NSArray' với nó không thực sự giải mã kết quả không? – wulong

+0

ý của bạn là gì? làm đơn giản 'NSLog (@"% @ ", [NSJSONSerialization JSONObjectWithData: tùy chọn dữ liệu: 0 lỗi: &err]);' xuất từ ​​điển với chuỗi có mã unicode đã giải mã, tức là '\ U00f6'. – Simon

+1

Có thể cách NSLog chọn đại diện ký tự là với mã thoát ra chứ không phải là ký tự thực tế vì mục đích giữ sạch nhật ký Bạn có đang truyền trực tiếp đối tượng dữ liệu từ thư viện mạng tới NSJSONSerialization không? Bạn có thể đăng một số mã mẫu không? –

Trả lời

3

Mô tả cuộc gọi NSLog trên các đối số của nó, điều này xảy ra để in mã Unicode thay vì ký tự. Hãy thử ví dụ:

NSLog(@"%@", [NSDictionary dictionaryWithObject:@"ö" forKey:@"hello"]); 

Và bạn sẽ thấy rằng nó in

{ 
    hello = "\U00f6"; 
} 

Vì vậy, rất có thể, đó là giải mã JSON của bạn đã được thực hiện tốt.

0

JSONSerialization chỉ có thể được sử dụng với một số loại: NSString, NSNumber, NSArray, NSDictionary hoặc NSNull chỉ theo mặc định ... nếu bạn cần phải sử dụng các đối tượng khác trong JSON của bạn, tôi khuyên bạn nên sử dụng https://github.com/johnezang/JSONKit

Các vấn đề liên quan