我有一个应用程序,下载包含希伯来语字符的网站的html,这是代码:
std::string stringToSearch[] = {"Siva123456789abcdefghiabcdefghjklm123"};
std::string pattern1(Siva123.*abc.*abc.*123);
std::string pattern2(Siva123.*abc.*abc.*12.);
size_t patternLength1 = 0;
size_t patternLength2 = 0;
std::smatch matched_elements;
if (std::regex_match(stringToSearch [0], matched_elements, pattern1))
{
patternLength1 = matched_elements.length();
}
if (std::regex_match(stringToSearch [0], matched_elements, pattern2))
{
patternLength2 = matched_elements.length();
}
我的问题是,希伯来字符显示为gibrish:òøëúùòåú - éåíùéùé
如何下载html并获取正确的字符?
答案 0 :(得分:0)
此服务器的响应编码为“Windows Hebrew”。
我正在使用CoreFoundation来找到正确的String编码等价物:
let newurl = NSURL(string: "http://www.handasaim.co.il")
var error: NSError?
let encoding = CFStringConvertEncodingToNSStringEncoding(UInt32(CFStringEncodings.WindowsHebrew.rawValue))
let html = String(contentsOfURL: newurl!, encoding: encoding, error: &error)
结果:
תיכוןלהנדסאיםהרצליהלידאוניברסיטתתלאביב
Swift 2更新
if let newurl = NSURL(string: "http://www.handasaim.co.il") {
let encoding = CFStringConvertEncodingToNSStringEncoding(UInt32(CFStringEncodings.WindowsHebrew.rawValue))
if let html = try? String(contentsOfURL: newurl, encoding: encoding) {
print(html)
}
}
注意:看一下Martin R的method来自动检测服务器响应的编码。我的解决方案是使用curl检查标题。