2015年10月7日水曜日

iOS9、Objective-CでHTMLParserを使っていたら文字化け起こした

何時間もかかってしまったが原因を特定できました。

HTMLParserはlibxml2のラッパーでHTMLをパースするときに
大いに助けられています。

が!iOS9で日本語部分がどうしても文字化けを起こしてしまい
使いものにならない。

パースする前は正常、パース後に文字化けする。
ってことは確実にHTMLParserが原因。にたどり着くまでが時間かかった。
iOS9でいろんな文字化けが出ているようで、その一つだと楽観視してたせいだ。

実際、原因はCFStringGetCStringPtrという関数がnullだったせいで、
エンコーディング引数が正常にわたっていなかったようで。
実際下記のサイトではnullになりうるからって書いてあった。
でもHTMLParser内ではそれは考慮された実装になっていないため気をつける必要がある。


NSString *enc = (__bridge NSString *) CFStringConvertEncodingToIANACharSetName(cfenc);
とするようにして
_doc = htmlReadDoc ((xmlChar*)[string UTF8String], NULL, [enc UTF8String], optionsHtml);
というように書き換えるとうまくいく。

文字化けっていやだね。
Githubのissueに出しておくかな。

と思ったらすでに提議されてたー!
https://github.com/zootreeves/Objective-C-HMTL-Parser/issues/34

0 件のコメント:

コメントを投稿