この URL から XML の Google 天気 API を取得しようとしました。
http://www.google.com/ig/api?weather=,,,24467280,39606640&hl=ar
アラビア語です。
私が使用したのは、NSURLConnection を使用してこのデータを取得し、NSXMLParser で解析したことです。
受信したデータが正しくエンコードされていません。インポート後に XML ファイルに入れようとしたところ、次のようなデータが見つかりました。
<?xml version="1.0"?><xml_api_reply version="1">
<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0" ><forecast_information><city data=""/><postal_code data=""/><latitude_e6 data="21429730"/><longitude_e6 data="39828370"/><forecast_date data="2012-03-14"/><current_date_time data="2012-03-14 17:00:00 +0000"/><unit_system data="SI"/></forecast_information><current_conditions><condition data="’«›Ú"/><temp_f data="97"/><temp_c data="36"/><humidity data="«·—ÿÊ»…: ٢٢٪"/><icon data="/ig/images/weather/sunny.gif"/><wind_condition data="«·—Ì«Õ: Éʻ »”—⁄… 8 fl„/”«⁄…"/></current_conditions><forecast_conditions><day_of_week data="«·√—»⁄«¡"/><low data="23"/><high data="37"/><icon data="/ig/images/weather/mostly_sunny.gif"/><condition data="„‘„” ›Ì √€·» «·√Êfi« "/></forecast_conditions><forecast_conditions><day_of_week data="«·Œ„Ì”"/><low data="20"/><high data="35"/><icon data="/ig/images/weather/mostly_sunny.gif"/><condition data="„‘„” ›Ì √€·» «·√Êfi« "/></forecast_conditions><forecast_conditions><day_of_week data="«·Ã„⁄…"/><low data="18"/><high data="33"/><icon data="/ig/images/weather/mostly_sunny.gif"/><condition data="„‘„” ›Ì √€·» «·√Êfi« "/></forecast_conditions><forecast_conditions><day_of_week data="«·”» "/><low data="19"/><high data="33"/><icon data="/ig/images/weather/mostly_sunny.gif"/><condition data="„‘„” ›Ì √€·» «·√Êfi« "/></forecast_conditions></weather></xml_api_reply>
もちろん、NSXMLParser からエラーが発生しました。
エラー Domain=NSXMLParserErrorDomain Code=9 「操作を完了できませんでした。(NSXMLParserErrorDomain エラー 9.)」
これは、xml データが破損していることを意味します。
Google からのリンクを次のように変更した場合:
http://www.google.com/ig/api?weather=,,,21429730,39828370&hl=en
(今は英語に注意してください)、すべてが正しく機能します..
取得したアラビア語の XML データを次の方法でエンコードしようとしました。
NSString * encodedString = [[NSString alloc] initWithBytes:recievedData.bytes length:recievedData.length encoding:NSStringEncodingConversionAllowLossy];
そして、次の方法でコンテンツをファイルに入れました。
[[NSFileManager defaultManager] createFileAtPath:filePath contents:[encodedString dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
現在のコンテンツは改善されていますが、まだ間違っています。現在のコンテンツ:
<?xml version="1.0"?><xml_api_reply version="1"><weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0" ><forecast_information><city data=""/><postal_code data=""/><latitude_e6 data="21429730"/><longitude_e6 data="39828370"/><forecast_date data="2012-03-14"/><current_date_time data="2012-03-14 17:00:00 +0000"/><unit_system data="SI"/></forecast_information><current_conditions><condition data="ÕÇÝò"/><temp_f data="97"/><temp_c data="36"/><humidity data="ÇáÑØæÈÉ: ٢٢٪"/><icon data="/ig/images/weather/sunny.gif"/><wind_condition data="ÇáÑíÇÍ: ÌäæÈ ÈÓÑÚÉ 8 ßã/ÓÇÚÉ"/></current_conditions><forecast_conditions><day_of_week data="ÇáÃÑÈÚÇÁ"/><low data="23"/><high data="37"/><icon data="/ig/images/weather/mostly_sunny.gif"/><condition data="ãÔãÓ Ýí ÃÛáÈ ÇáÃæÞÇÊ"/></forecast_conditions><forecast_conditions><day_of_week data="ÇáÎãíÓ"/><low data="20"/><high data="35"/><icon data="/ig/images/weather/mostly_sunny.gif"/><condition data="ãÔãÓ Ýí ÃÛáÈ ÇáÃæÞÇÊ"/></forecast_conditions><forecast_conditions><day_of_week data="ÇáÌãÚÉ"/><low data="18"/><high data="33"/><icon data="/ig/images/weather/mostly_sunny.gif"/><condition data="ãÔãÓ Ýí ÃÛáÈ ÇáÃæÞÇÊ"/></forecast_conditions><forecast_conditions><day_of_week data="ÇáÓÈÊ"/><low data="19"/><high data="33"/><icon data="/ig/images/weather/mostly_sunny.gif"/><condition data="ãÔãÓ Ýí ÃÛáÈ ÇáÃæÞÇÊ"/></forecast_conditions></weather></xml_api_reply>
NSXMLParser でエラーが発生することはなくなりましたが、テキストが読めなくなります。
この大きな質問で申し訳ありません。
誰でも私を助けることができますか?