2010-01-23 32 views
46

Tôi có chuỗi sau ...NSURL URLWithString: là null với ký tự có dấu không phải tiếng Anh

NSString *googleSearchString = @"http://www.google.com/search?q=lyrics+%22Tænder+På+Dig%22+%22Jakob+Sveistrup%22"; 

Chú ý rằng nó có một số ký tự có dấu. Khi tôi cố gắng biến url đó thành url, url được trả về là null ...

[NSURL URLWithString:googleSearchString]; 

Vì vậy, thông thường url hoạt động trừ khi có các ký tự không phải tiếng Anh có trong chuỗi. Bất kỳ trợ giúp về cách xử lý đó?

Trả lời

68

Bạn cần phải thoát khỏi các ký tự đặc biệt để làm cho nó hoạt động bình thường. Một cái gì đó như:

[NSURL URLWithString:[googlSearchString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; 
+1

đó làm việc! Cảm ơn câu trả lời. Tôi vừa tìm thấy hàm CFURLCreateStringByAddingPercentEscapes() cũng như vậy sẽ thực hiện công việc. – regulus6633

+1

Đáng chú ý, điều này chắc chắn sẽ xử lý các ký tự nước ngoài của bạn, nhưng nó sẽ không xử lý đúng các ký tự không phải chữ cái như + hoặc /. NSString không có bất kỳ chức năng được xây dựng trong đó thực sự mã hóa URL đúng cách, nhưng điều này làm việc cho các ký tự mở rộng. – clee

+1

Câu hỏi: đối với url web ... Nếu bạn sử dụng NSASCIIStringEncoding hoặc NSUTF8StringEncoding – regulus6633

-1

Một số lần một khoảng trống trong url có thể gây ra sự cố này.

7

Sử dụng Swift 2,2

Đối với thoát phi tiếng Anh ký tự, ví dụ: để thực hiện một yêu cầu URL làm:

let urlPath = path.URLString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())

Đây urlPath là an Optionalpath là url ban đầu của bạn (địa chỉ có ký tự không phải tiếng Anh)

0

Trong phương pháp 2k16 stringByAddingPercentEscapesUsingEncoding: không còn được dùng nữa và không có cách nào thoát khỏi điều này một cách chính xác. Khi URL được xác định trước chỉ sử dụng chuỗi được mã hóa của trình duyệt, vì phương thức stringByAddingPercentEncodingWithAllowedCharacters: không thể thoát khỏi toàn bộ URL.

1

Sử dụng này cho SWIFT 4:

let url = myURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) 
let myURL = URL(string: url) 
Các vấn đề liên quan