Это UTF-8 подходит для текста / обычный MIME тип? - PullRequest
5 голосов
/ 05 марта 2012

Я экспортирую данные через файлы.Выходные данные представляют собой закодированные в base64 данные.

$data = base64_encode(serialize($data));

В результате получается что-то вроде:

bGFzcyI6MTp7czo1OiJzZXR1cCI7YTo3Mzp7czoyNToicGFnZXNfY29udGFjdF91c19oZWFkbGlu

Поэтому мне интересно, какая кодировка больше подходит для этих данных (простой текст).us-ascii кажется достаточно, но utf-8 всегда кажется защищенным от ошибок по умолчанию.

header('content-type: text/plain; charset=utf-8');

Ответы [ 2 ]

20 голосов
/ 06 марта 2012

Вам даже не понадобится кодировка. 'text / plain' может быть неправильным, потому что это также не совсем текст.

Несмотря на то, что он совместим с ascii, utf-8, latin1 (как упоминалось в ruakh), вы должны просто обращаться с ним как с двоичным файлом.

Обновление

Я хотел бы уточнить это немного (после всех отрицательных голосов, простые парни дают мне шанс!)

@ dan04: UTF-8 - это текст, я не говорил, что это не так. Base64 нет, base64 также является кодировкой, но она может кодировать любую двоичную последовательность. Base64 закодирован таким образом, что его можно обернуть в US-ASCII (и, следовательно, также в UTF-8 и latin1 / ISO-8859).

Base64 по-прежнему является просто двоичной последовательностью, а не по тексту определения. Тот факт, что тот же диапазон значений октетов используется как US-ASCII (и «печатается» всем, что читает US-ASCII), не делает его текстовым.

По этой же причине Base64 не имеет своего собственного mimetype. Это считается кодировкой передачи контента. (посмотрите!)

Таким образом, правильный правильный способ обслуживания Base64 - это mimetype того, что содержит строка, вместе с заголовком Content-Transfer-Encoding. Например, если вы кодируете JPEG, это правильный формат.

Content-Type: image/jpeg
Content-Transfer-Encoding: base64 

По этой же причине я чувствую, что если вы не хотите ничего говорить о содержимом строки (или у вас нет этой информации), лучше всего рассматривать ее как «универсальный двоичный файл», например:

Content-Type: application/octet-stream
Content-Transfer-Encoding: base64 
7 голосов
/ 05 марта 2012

Это действительно не имеет значения; Ваш контент действителен US-ASCII, действителен UTF-8, действителен ISO-8859-1 (или, я полагаю, любой ISO-8859-x), действителен Windows-1252 и т. д. Только не ставьте UTF-16 или EBCDIC или что-то еще.

(Что бы это ни стоило, я бы пошел с US-ASCII, потому что он полностью поддерживается даже компьютерами, предшествующими Юникоду, не будучи столь явно набором символов до Юникода, как ISO-8859-1 или еще чем-то; но это действительно субъективные предпочтения.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...