Назад | Перейти на главную страницу

re: UTF-8, PHP и XML Mysql

Это относится к https://stackoverflow.com/questions/1791082/utf-8-php-and-xml-mysql, который я все еще пытаюсь осмыслить.

У меня есть пара отдельных вопросов, которые, надеюсь, помогут мне понять, как решать возникающие у меня проблемы.

Я пытаюсь прочитать значения из базы данных и вывести их в файл в формате UTF-8. Но у меня проблемы с кодированием, поэтому я подумал, что уберу весь свой код и начну с:

$string = "Otivägen";
// then output to a file.

Но в vim Я даже не могу ввести эту строку, каждый раз, когда я вставляю ее, я получаю Otivägen

Я попытался создать пустой файл PHP только с этой строкой и загрузить его, но когда я cat файл снова получаю Otivägen.

Мои вопросы ...

1) Why is `vim` displaying it like this?
2) If the file is downloaded would it display correctly if an application was expecting UTF-8?
3) How can I output this string into a file that will eventually be an XML file in UTF-8 encoding.

Мое понимание кодировки на данный момент ограничено, и я пытаюсь понять это.

1) Почему vim отображать это так?

Похоже, vim отображает данные в кодировке UTF-8 как ISO 8859-1. Копирование и вставка могут быть проблематичными (вы не пишете, в какой системе вы находитесь), поэтому я бы посоветовал вводить текст напрямую.

Чтобы правильно отредактировать файл в vim, сначала настройте vim на использование UTF-8:

:set encoding=utf-8

Затем введите текст, убедитесь, что он правильно отображается, и сохраните. Это даст вам файл, закодированный в UTF-8.

2) Если файл загружен, будет ли он отображаться правильно, если приложение ожидает UTF-8?

Зависит от кодировки. Если сохранить как указано выше, то да.

3) Как я могу вывести эту строку в файл, который в конечном итоге станет XML-файлом в кодировке UTF-8.

Очевидно, это очень сложно. Я не так хорошо знаком с PHP, но, согласно Википедии:

В настоящее время PHP не имеет встроенной поддержки Unicode или многобайтовых строк; Поддержка Unicode будет включена в PHP 6 [...]

Так что вам, вероятно, придется поискать обходной путь в Google. Есть также несколько вспомогательных библиотек UTF-8 для PHP и UTF-8. В противном случае было бы лучше выбрать другой язык, например Java с надежной поддержкой Unicode.

UTF8 - это весело. Как только это сработает. : - / Если что-то в цепочке ожидает чего-то еще и не проверяет, то все идет в форме груши.

  • Вам необходимо использовать терминальную программу, поддерживающую UTF8. Gnome-terminal делает. KTerm делает. ETerm этого не делает.
  • Проверьте переменную LANG в вашей оболочке. Мой - en_AU.UTF-8, что означает английский (австралийский) в UTF8.
  • vim должен унаследовать это от оболочки. Вы должны иметь возможность проверить это с помощью :set encoding

Я просто попробовал, и все заработало.

Ключ в том, что все должен быть в режиме UTF8.