У меня есть массив байтов в качестве входных данных. Это должно быть двоичное представление HTML, соответствующего стандарту UTF8. Это так, но только в большинстве случаев. Иногда он также содержит встроенные нули (символ \x0
или NUL
). Это не под моим контролем. Мне нужно преобразовать этот массив байтов в строку.
Пробовал до сих пор:
- Очевидно, что использование
StreamReader
илиTextReader
не работает, так как оно останавливается при нажатии первогоNUL
. Encoding.UTF8.GetString
тоже не работает - тоже останавливается на первомNUL
Что сработало, но довольно неэлегантно:
mynewarray = myoldarray.Where( x => x!=0).ToArray();
var output = Encoding.UTF8.GetString(mynewarray);
Есть ли более элегантный способ сделать это, за исключением создания нового массива байтов, пропускающего символы NUL
, а затем использования одного из приведенных выше решений? Массив байтов может быть довольно большим, более 2-4 Мб... MSDN сообщает, что строки могут фактически содержать встроенные NUL
, но не сообщает, каковы наилучшие подходы к обработке таких строк.
UTF8.GetString(byte[])
не должен останавливаться на нуле... Но после этого у вас есть строка, содержащая'\0'
- person Henk Holterman   schedule 20.02.2012