2010-03-26 38 views
20

khi tôi cố gắng để chuyển đổi hình thức utf-8 chuỗi NSString như vậy:"không đầy đủ tên ký tự chung" với stringWithUTF8String

NSString *s = [NSString stringWithUTF8String:"\U0627\U0644\U0641\U0631\U0646"]; 
NSLog(@"%@", s); 

tôi nhận được lỗi biên dịch:

incomplete universal character name 

lưu ý rằng nó đôi khi chỉ hoạt động tốt:

NSString *UAE = [NSString stringWithUTF8String:"\U0627\U0644\U0641\U0631\U0646"]; 
    NSLog(@"%@", UAE); 

và đầu ra:

الامارات 

vậy tại sao điều đó lại xảy ra? Hãy giúp tôi.

+0

Gee, đó là một lỗi trong Xcode. Non ASCII vẫn còn khó để có được cho một số quốc gia ;-) – brainray

Trả lời

0

tên ký tự phổ biến chưa đầy đủ có nghĩa là bạn đang thiếu một phần của một trong các ký tự utf8 mà bạn đang cố viết.

UTF8 kéo dài từ 1 ký tự byte đến 4 ký tự byte, có lẽ một trong những bạn dài mà bạn đã viết và bạn đang thiếu 1 byte hoặc như vậy ..

+0

cảm ơn rất nhiều Jack, tuy nhiên, im cố gắng phân tích cú pháp chuỗi UTF-8 từ một webservice mà tôi không có quyền kiểm soát. Không gian trong chuỗi utf-8 có liên quan đến vấn đề không. tôi có nghĩa là làm thế nào tôi có thể đại diện cho một char không gian trong trường hợp của tôi ở đây? cảm ơn một lần nữa – Nasser

+0

Nếu chuỗi đến từ một webservice, làm thế nào bạn nhận được một lỗi thời gian biên dịch? –

+0

thực sự tôi đã sao chép chuỗi utf-8 theo cách thủ công từ dict và trả về nó bằng phương thức -stringWithUTF8String, đây là khi tôi nhận được lỗi biên dịch – Nasser

36

\ U và \ u không phải là những điều tương tự. Các \ U thoát hy vọng 8 (hex) chữ số thay vì 4.

này nên làm việc:

NSString *s = [NSString stringWithUTF8String:"\u0627\u0644\u0641\u0631\u0646"]; 
+0

man man man, cảm ơn bạn rất nhiều :) – Nasser

+2

Apple thực sự mắc lỗi này khi ghi lại sự kiện cho các bài kiểm tra UI. (Ít nhất là Xcode 7.3) –

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