2013-12-02 5 views
0

У меня есть много изображений, которые были импортированы из SQL-дампа с помощью кодировки utf-8. Таким образом, вместо «FF D8 FF E0» я вижу «C3 BF C3 98 C3 BF C3 A0» в начале jpeg-изображений.Преобразование utf-8 в однобайтный двоичный файл в PHP

Я пробовал iconv ('utf-8', 'iso-8859-1', $ data), но он не преобразует весь файл (есть символы в utf-8, которые не могут быть преобразованы в iso-8859 -1.

Как я могу преобразовать UTF-8 просто один байт двоичного файла с unrespect кодированием?

+2

Если изображения действительно обрабатывались как текст iso-8859-1 и записывались в базу данных в виде текста utf-8, и вы не можете их преобразовать, тогда что-то странно , Они должны быть обратимыми - неважно, что * все * символы в utf-8 не представляются в iso-8859-1, так как * только * символы из iso-8859-1 могли быть найдены в исходных изображениях, потому что они были обработаны * как iso-8859-1. Какие персонажи дают вам проблемы? Кроме того, я надеюсь, что само собой разумеется, что изображения не должны рассматриваться как текст независимо от кодировки. :) – bzlm

+0

Если бы я был вами, я бы просто не сохранил изображения, закодированные как UTF8. Это решает все проблемы здесь. – Artur

+0

вам нужно знать кодировку, которая была использована при преобразовании в utf-8 – njzk2

ответ

0

проблема заключалась в том, потому что есть некоторые представления одного и того же символа в UTF-8, так называемые «не -shortest ", которые могут быть преобразованы математически, но iconv считает их ошибочными и не преобразует.

Я сделал короткую функцию, которая преобразует текст любого символа utf-8 r в Unicode (UTF-16). А затем переназначьте некоторые значения, отличные от ASCII, в ASCII по простой таблице (например, 0x20ac совпадает с 0x80 и т. Д.). Вы можете найти полный код и таблицу переназначения здесь: Converting UTF-8 with non-shortest characters to one-byte encoding