2014-12-03 2 views
2

Поскольку Rebol 3 поддерживает unicode, а UTF16 используется внутренне при необходимости (если он имеет только символы ASCII, он находится в ASCII), он должен быть таким же простым, как копирование содержимого памяти из двоичного файла и настройка структуры REBVAL. Тем не менее, единственный способ, который я нахожу, - это повторение бинарного файла и преобразование каждого символа в отдельности.Каков наиболее эффективный способ декодирования двоичного файла UTF16?

Тот же вопрос относится к кодировке строки в UTF16.

+1

Внутреннее фиксированное использование UTF16 не делается красным, а не выбирать размер, основанный на [высоком элемент кода в строке] (http://www.red-lang.org/2012/09/plan-for-unicode-support.html). Rebol тоже должен делать это, поэтому любой соблазн сделать магию воспользовался деталями реализации [REBUNI] (https://github.com/rebol/rebol/blob/25033f897b2bd466068d7663563cd3ff64740b94/src/include/reb-ch # L149) следует учитывать это. – HostileFork

ответ

3

ОК, похоже, что это нелегкий способ сделать это. Поэтому для этой цели я добавил два кодека UTF-16LE/BE. Смотрите это обязательство: https://github.com/zsx/r3/commit/630945070eaa4ae4310f53d9dbf34c30db712a21

С этим изменением, вы можете сделать:

>> b: encode 'utf-16le "hello" 
== #{680065006C006C006F00} 

>> s: decode 'utf-16le b  
== "hello" 

>> b: encode 'utf-16be "hello" 
== #{00680065006C006C006F} 

>> s: decode 'utf-16be b 
== "hello" 
+0

Выглядит круто ... Я не уверен, как далеко планировали пойти «в коробке» кодеки, а не с расширениями ... – HostileFork

+0

Да, это то, о чем я тоже не уверен, и вот почему Сначала я задал этот вопрос, чтобы убедиться, что я не пропустил ничего очевидного перед добавлением нового кодека. Как только мы начнем добавлять, нам нужна строка, в которой перестать добавлять. –

Смежные вопросы