Я создаю двоичный файл для передачи третьей стороне, содержащей изображения и информацию о каждом изображении. Файл использует формат длины записи, поэтому каждая запись является определенной длиной. Начало каждой записи - индикатор длины записи, длина которого составляет 4 символа и представляет длину записи в формате Big Endian.Использование неправильного кодирования при записи в файл C#
Я использую BinaryWriter для записи в файл, а для индикатора длины записи я использую Encoding.Default.
Проблема, с которой я столкнулся, состоит в том, что в одной записи есть один символ, который отображается как «?» потому что он непризнан. Мой алгоритм построения строки для индикатора длины записи заключается в следующем:
private string toBigEndian(int value)
{
string returnValue = "";
string binary = Convert.ToString(value, 2).PadLeft(32, '0');
List<int> binaryBlocks = new List<int>();
binaryBlocks.Add(Convert.ToInt32(binary.Substring(0, 8), 2));
binaryBlocks.Add(Convert.ToInt32(binary.Substring(8, 8), 2));
binaryBlocks.Add(Convert.ToInt32(binary.Substring(16, 8), 2));
binaryBlocks.Add(Convert.ToInt32(binary.Substring(24, 8), 2));
foreach (int block in binaryBlocks)
{
returnValue += (char)block;
}
Console.WriteLine(value);
return returnValue;
}
Он принимает длину записи, преобразует его в 32-битных двоичный, преобразует что куски 8-разрядные двоичные, а затем преобразует каждый кусок соответствует своему характеру. Строка, возвращаемая здесь, содержит правильные символы, но когда она записывается в файл, один символ не распознается. Вот как я это пишу:
//fileWriter is BinaryWriter and record is Encoding.Default
fileWriter.Write(record.GetBytes(toBigEndian(length)));
Возможно, я использую неправильный тип кодирования? Я пробовал UTF-8, который должен работать, но иногда он дает дополнительные символы.
Заранее за вашу помощь.
Каков характер, который не преобразуется правильно? –
Поскольку значение передается символу, а затем закодировано, как если бы оно было реальным символом, существует целый ряд значений, которые не работают должным образом. Большинство значений выше 127, вероятно, были бы неправильными ... – Guffa