Как определить минимальное количество байтов, необходимых для символа?

Есть ли способ точно определить минимальное количество байтов, необходимое для символа в определенной кодировке? Как одна из кодировок, поддерживаемых расширением mbstring. Значение будет 1 для UTF-8, 2 для UTF-16 и т. д.

Я не хочу получать длину определенной строки или символа.

Я хочу знать минимальный размер символа, поддерживаемый данной кодировкой, в соответствии с ее спецификацией.

В настоящее время я использую этот код:

<?php

function flawed_detection($encoding)
{
    // I use 'a' in the hope that this char need the least number of bytes in all the supported encodings
    return strlen(mb_convert_encoding('a', $encoding, 'UTF-8'));
}

foreach (mb_list_encodings() as $encoding) {
    echo "$encoding: ", flawed_detection($encoding), "\n";
}

Частичный вывод:

...
UTF-16LE: 2
UTF-8: 1
UTF-7: 1
UTF7-IMAP: 1
ASCII: 1
EUC-JP: 1
...

Но я не уверен, какой "правильный" символ использовать. Если когда-либо есть один.

редактирование: я протестировал метод грубой силы со всеми символами от 0 до U+10FFFF во всех кодировках, и результаты точно такие же, как и с моей функцией finally_not_so_flawed_detection (с символом 'a' или с пробелом) :р


person Ayell    schedule 02.08.2016    source источник
comment
Возможный дубликат Измерить размер строки в байтах в php   -  person Alex Karshin    schedule 03.08.2016
comment
Почему? Какова цель здесь? Есть ли у вас веская деловая или техническая причина не использовать UTF-8 повсеместно?   -  person Peter Bailey    schedule 03.08.2016
comment
Что почему? Это вопрос общего назначения :p И я использую UTF-8 в своем проекте, но мне нужно декодировать некоторые строки в двоичных файлах.   -  person Ayell    schedule 03.08.2016
comment
связанный подход грубой силы в python: stackoverflow.com/questions/30870107/   -  person toucanb    schedule 04.08.2016


Ответы (1)


Я не знаю, как вы можете сказать наверняка, но разумным приближением будет проверка ширины символа пробела (" ", U+20 и т. д.). Насколько я знаю, каждая разумная кодировка текста поддерживает этот символ, и каждая кодировка переменной длины использует для него последовательность минимальной длины.

person Community    schedule 03.08.2016
comment
'a' и '' дают одинаковые результаты :) - person Ayell; 03.08.2016