Имена файлов UTF8 в PHP и различной кодировке Unicode

Я использую его, когда у меня есть объект Диапазона, где один или оба конца должны быть, открывают

5
задан iloveitaly 7 July 2009 в 01:37
поделиться

3 ответа

Благодаря советам, данным в двух ответах, я смог покопаться и найти некоторые методы для нормализации различных разложений Unicode данного символа. В ситуации, с которой я столкнулся, я обращался к файлам, созданным приложением OS X Carbon. Это довольно популярное приложение, и поэтому его имена файлов, похоже, соответствуют определенной декомпозиции Unicode.

В PHP 5.3 был введен новый набор функций , который позволяет вам нормализовать строку Unicode до определенного разложение. По-видимому, есть четыре стандарта декомпозиции, на которые вы можете разложить строку Unicode. Python имеет возможности нормализации Unicode, начиная с версии 2.3 через unicode.normalize . Эта статья о python ' s обработка строк юникода помогла немного лучше понять кодировку / обработку строк.

Вот быстрый пример нормализации пути к файлу в Юникоде:

filePath = unicodedata.normalize('NFD', filePath)

Я обнаружил, что формат NFD работает для всех моих целей, интересно, это это стандартная декомпозиция имен файлов в Юникоде.

6
ответ дан 13 December 2019 в 22:14
поделиться

Трехбайтовая последовательность на самом деле представляет собой представление utf8 e (0x65) , за которым следует , объединяющий ´ (0xcc 0x81) , а 0xc3 0xa9 означает «непосредственно» для é .
Сопоставление с поддержкой utf-8 должно учитывать возможные декомпозиции, но я не знаю, как вы можете включить это (и, вероятно, перекомпилировать исходный код php) на Mac.
Лучшее, что я могу предложить, - это описание «Использование UTF-8 с Gentoo» .

3
ответ дан 13 December 2019 в 22:14
поделиться

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

Различные (двухбайтовые и трехбайтовые) представления é - это кодировки UTF-8 для составленные и разложенные варианты этого символа в Юникоде. В Юникоде это разные способы представления одного и того же визуального символа. Unicode имеет концепцию «канонизации», при которой все представления одного и того же символа преобразуются в одно представление, что-то вроде сжатия двух строк в нижний регистр для выполнения сравнения без регистра.

Linux не выполняет канонизацию или любую другую обработку автоматически для имен файлов, таким образом, файл может быть назван с помощью предварительно составленных (например, двухбайтовой последовательности) или разложенных (например, трехбайтовой последовательности) символов или любого их сочетания, это зависит от того, кто назвал файл. Если вы создаете файлы, вы можете установить политику (например, всегда использовать предварительно составленные символы) и написать код для ее применения. В противном случае здесь нельзя полагаться на какое-либо конкретное правило.

1
ответ дан 13 December 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: