Хорошо, я нашел несколько интересных ссылок, хотя пока не совсем удачное решение.
Одна очевидная вещь, которую я пробовал, - играть с кодировками. Есть 2 очевидные вещи, которые действительно должны работать:
- Latin-1 (он же ISO-8859-1): это однобайтовая кодировка, отображающая один-к-одному с Unicode. Таким образом, теоретически должно быть достаточно объявить тип содержимого "text / plain; charset = ISO-8859-1" и получить символ за байтом. Увы, из-за идиотской логики браузеров (и даже более идиотского мандата в HTML 5!) Происходит транскодирование, которое странным образом меняет диапазон символов высокого контроля (коды 128 - 159). По-видимому, это связано с обязательным предположением, что кодировка на самом деле - Windows-1252 (почему? По каким-то глупым причинам ... но это так и есть)
- UCS-2 - это 2-байтовое кодирование фиксированной длины, предшествующее UTF-17; и просто разбивает 16-битные коды символов на 2 байта. Увы, браузеры, похоже, не поддерживают его.
- Теоретически UTF-16 может работать, но есть проблема символов суррогатной пары (0xD800 - 0xDFFF), которые зарезервированы. И если включены пары байтов, которые кодируют эти символы, происходит повреждение.
Однако: похоже, что преобразование для Latin-1 может быть обратимым, и если так, держу пари, я все-таки смогу его использовать. Все мутации имеют размер от 1 байта (0x00 - 0xFF) до значений больше байта, и, по крайней мере, для Firefox нет двусмысленных отображений. Если это верно и для других браузеров, можно будет отобразить значения обратно и устранить вредные эффекты автоматического транскодирования. И тогда это будет работать для нескольких браузеров, включая IE (с оговоркой о необходимости чего-то особенного для работы с нулевыми значениями).
Наконец, некоторые полезные ссылки для преобразования типов данных: