Где я могу найти биты UTF8, чтобы преобразовать таблицу, чтобы преобразовать, например, «ã ±» в « - -?»?

StackOverflow https://stackoverflow.com/questions/3920432

Вопрос

Я тщательно смотрел через Интернет, и я не могу найти таблицу с такими конверсиями. У меня есть некоторые ошибки и не слишком надежны, поэтому я искал какой -то официальный стол или как и, к сожалению, я не знаю .. так что я здесь ...

Как упомянуто в названии, я хочу сделать, например, знать, что означает «ã ±» (этот я уже знаю ... «ñ»), но не только для испанских персонажей, но и другие (я уже знаю Польские).

Основная проблема заключается в том, что у меня есть строка в PHP, которая иногда может приходить, например, «eñe» (что в порядке) и другие, как «eEa ± e» .. и в самых дорогостоящих я должен быть в состоянии изменить ее на «Eñe», так Это читабельно .. но если все в порядке, я не хочу его менять. Чтобы сделать это, я использовал функцию utf8_decode, но в случае, если строка будет читаемой, она все равно изменит «j» на «■» (но белый) .. Вот почему я не всегда не могу декодировать строку, и и Если я использую функцию mb_detect_encoding, я всегда получу «UTF-8» в качестве ответа .. и это не так полезно ..

Однажды я узнаю, что все чары UTF8, написанные, например, «ã ±» для «ñ», «Å¹» для «ź» и т. Д., Я планирую выполнить функцию, которая в основном заменит одно на другое .. что является Вроде то же самое, что и у UTF8_Decode .. если кто -то здесь не имеет лучшего решения!

Заранее спасибо! Привет!

Это было полезно?

Решение

почему ты хочешь сделать это? Вы хотите восстановить поврежденные данные или около того?

Должно В самом деле Не делать это как часть обычного потока бизнес -кода. Все, что вам нужно сделать, это убедиться, что все слои вашего веб-приложения правильно используют UTF-8. Источник PHP, заголовок отклика HTTP и тело, таблица БД, соединение БД и так далее. Смотрите также PHP UTF-8 Cheatsheet.

если ты на самом деле Хотите сделать это в качестве единовременной задачи для восстановления поврежденных данных, тогда полезно знать, что поврежденные данные в вашем вопросе указывают на данные UTF-8, которые неправильно хранятся или отображаются как ISO-8859-1. Вам просто нужно прочитать данные как ISO-8859-1 и написать как UTF-8. Один раз. Тогда сделайте это правильно.

В качестве доказательства ñ (Символ Unicode «Латинская маленькая буква n с тилде» (U+00F1)) существуют в Unicode (UTF-8, мультибайтовая кодировка) байтов 0xC3 и 0xB1. Анкет Когда эти байты кодируются с использованием однобайтового кодирования, подобного ISO-8859-1, затем 0xC3 становится Ã и 0xB1 становится ±. Анкет Смотрите также ISO-8859-1 Mayout.

Другие советы

Проблема в том, что после Мохибак, Не существует надежного способа преобразовать его обратно в то, что это должно было означать. Видеть Этот абзац в Википедии Для объяснения проблемы:

Рассмотрим текстовый файл, содержащий немецкое слово мех в кодировании ISO-8859-1. Этот файл теперь открыт текстовым редактором, который предполагает, что вход UTF-8. Как первый байт (0x66) находится в пределах диапазона 0x000x7F, UTF-8 правильно интерпретирует его как f. Анкет Второй байт (0xFC) не является юридической ценностью для начала любого кодируемого UTF-8. Поэтому текстовый редактор может заменить байт на символ замены символа, чтобы предупредить пользователя, что что -то пошло не так. Последний байт (0x72) также в пределах диапазона кода 0x000x7F и может быть декодировано правильно. Вся строка теперь отображается так: f�r.

Плохо внедренный текстовый редактор может сохранить замену в форме UTF-8; Данные текстового файла будут выглядеть так: 0x66 0xEF 0xBF 0xBD 0x72, который будет отображаться в ISO-8859-1 снова как f�r. Замена также разрушает первоначальный байт, что делает невозможным восстановление того, какой характер был предназначен.

Вы должны избегать неправильного интерпретации текста, используя неправильное кодирование с самого начала. Исправить его, когда он сломан, слишком поздно.

Ваша проблема - проблема интерпретации больше, чем транскодирование. На любом современном компьютере-обычно вводится как двоичный 0xc3b1, так как это код UTF-8. Если вы интерпретируете это (без транскодирования) в старом коде ISO-латина-15, вы получите 0xc3 = ã, за которым следует 0xb1 = ±. Вот почему нет «таблицы»: это проблема дисплея.

Лучшее, что можно сделать, это избежать Iso-Latin исключительно. Это вызовет у вас множество проблем. Реальный способ исправить вашу программу: используйте только UTF-8 везде, это сэкономит вам много времени и головных болей.

В то же время, если вы действительно хотите принести эквивалентную строку ISO-Latin-15 к вашему вводу UTF-8 (чего вы не делаете, если вы получили вышеуказанное право), вы можете передать свою строку любому конвертеру кода, Просит его преобразовать UTF-8 в ISO-Latin-15Анкет Одна вещь, в которой вы должны быть осторожны,-это двойное транспортировка. Если у вас была строка UTF-8 и ошибочно попросила преобразование из ISO-Lating-15 в UTF-8, то вы получили строку UTF-8, которая фактически говорит о ã ±, что является бинарным 0xC383C2B1. Чтобы вернуть правильную строку UTF-8, ANWSER то же самое: попросите преобразовать вашу изуродованную строку из UTF-8 в ISO-Latin-15, который с радостью возьмет 0xC383 и преобразует ее в 0xc3, затем 0xc2b1 и преобразует его в 0xb1, давая вам правильную строку UTF-8, содержащую правильную ñ.

Особенно для PHP и веб-приложений, помните, что многие компьютеры (и все больше и больше в будущем) по умолчанию отправят вам UTF-8.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top