Как сохранить и отобразить символы ISO-8859-1 и UTF8, используя perl - PullRequest
3 голосов
/ 09 сентября 2011

Я довольно новичок в этом, и это может быть очень легко для большинства людей, но я боролся с этим в течение многих дней.

Я пишу веб-сканер, используя perl, и веб-сканер будет извлекать определенную информацию, используя LWP и некоторые простые регулярные выражения.

Эта информация сохраняется в базе данных mySQL, которая будет использоваться на устройстве Android. Однако когда я тестировал веб-сканер, я понял, что некоторая информация на китайском языке (典 華) использует числовое кодирование HTML (& # 20856; & # 33775;), а некоторая информация использует кодировку iso-8859-1 (Zhífú). Я решил китайскую часть, используя библиотеку PERL HTML :: Entities, которая может отображаться, когда я устанавливаю консоль на utf8. Однако другие буквы (Zhífú) могут отображаться только в iso-8859-1. Если я попытаюсь отобразить его в utf8, он станет Zh f . Мой вопрос:

  1. Как я могу определить, какую кодировку он использует, и как я могу отобразить его по-другому?
  2. Смогу ли я сохранить ее непосредственно в mySQL или сначала обработать информацию (исправьте меня, если я ошибаюсь, но я понимаю, что mySQL использует utf8 в качестве языка по умолчанию).
  3. Причиняет ли это какую-то проблему при отображении на устройстве Android?

Большое спасибо.

1 Ответ

6 голосов
/ 09 сентября 2011
(Zhífú) может отображаться только в iso-8859-1.Если я попытаюсь отобразить его в utf8, он станет Zh�f�.

Это полностью неверно.Вы можете отобразить «Zhífú» в терминалах / приложениях iso-8859-1 и UTF-8 / где угодно.Фактически, тот факт, что вы видите «Жифу», является доказательством того, что он может отображаться в UTF-8, поскольку это веб-страница UTF-8.Если вы получаете «Zh�f�», это потому, что вы не кодировали строку с использованием UTF-8, прежде чем передать ее терминалу / приложению / всему, что хочет UTF-8.

В любом случае, вклк вопросу.Я предполагаю, что вы храните текст, а не HTML.

Расшифруйте каждый ввод!Кодировать каждый вывод!Тогда нет проблем.

         From the web
     5a 68 c3 ad 66 c3 ba
              |
            decode         Done for you by ->decoded_content (LWP::UA)
              |            or by ->content (WWW::Mech)
              v

         Decoded text      Manipulate as desired
            Zhífú

              |  
            encode         Done for you by DBI
              |  
              v
           Database
5a 68 c3 83 c2 ad 66 c3 83 c2 ba

На самом деле, декодирование должно быть уже сделано для вас ->decoded_content, а кодирование должно быть сделано для вас DBI, поэтому я не понимаю, почему вы 'возникают проблемы с этим.

То же самое, когда вы читаете из базы данных и выводите на экран / что угодно.

5a 68 c3 83 c2 ad 66 c3 83 c2 ba
           Database
              |
            decode         Done for you by DBI if you use
              |            the ..._utf8 flag for your driver
              v

         Decoded text      Manipulate as desired
            Zhífú

              |  
            encode         use open ':std', ':locale';
              |  
              v
            Screen
5a 68 c3 83 c2 ad 66 c3 83 c2 ba
...