Я пытаюсь прочитать строку с нулевым завершением из массива байтов; параметром функции является кодировка.Являются ли нулевые термиторы частью кодирования текста?
string ReadString(Encoding encoding)
Например, «Foo» в следующих кодировках являются:
UTF-32: 66 00 00 00 6f 00 00 00 6f 00 00 00
UTF-8: 66 6f 6f
UTF-7: 66 6f 6f 2b 41 41 41 2d
Если я скопировал все байты в массив (чтение до нулевого терминатора) и передал этот массив в encoding.GetString()
, это не сработало бы, потому что если бы строка была кодирована UTF-32, мой алгоритм достиг бы «нулевого терминатора» после второго байта.
Итак, у меня есть двойной вопрос: есть ли нулевые терминаторы в кодировке? Если нет, как я могу декодировать строковый символ по символу и проверить следующий байт для нулевого терминатора?
Заранее спасибо
(предложения также ценятся)
Edit:
Если "Foo" был нулем и UTF-32 в кодировке, которая бы это ?:
1. 66 00 00 00 6f 00 00 00 6f 00 00 00 00
2. 66 00 00 00 6f 00 00 00 6f 00 00 00 00 00 00 00
для вашего редактирования будет «2. 66 00 00 00 6 00 00 00 6f 00 00 00 00 00 00 00», поскольку utf 32 рассматривает каждый символ (даже \ 0) как 4-байтовый массив – bigworld12 2017-03-22 18:50:47
вот быстрый тест с использованием C# interactive: http://i.imgur.com/yvYiTD8.png – bigworld12 2017-03-22 19:03:51