Ich erstelle eine Binärdatei, um sie an eine dritte Partei zu übertragen, die Bilder und Informationen über jedes Bild enthält. Die Datei verwendet ein Datensatzlängenformat, sodass jeder Datensatz eine bestimmte Länge hat. Der Anfang jedes Datensatzes ist der Datensatzlängenindikator, der 4 Zeichen lang ist und die Länge des Datensatzes im Big Endian-Format darstellt.Falsche Codierung beim Schreiben in eine Datei verwenden C#
Ich verwende einen BinaryWriter, um in die Datei zu schreiben, und für die Record Length Indicator verwende ich Encoding.Default.
Das Problem, das ich habe, ist, dass es ein Zeichen in einem Datensatz gibt, der als "?" weil es nicht erkannt wird. My-Algorithmus die Zeichenfolge für das Satzlängenanzeiger aufzubauen, ist dies:
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;
}
sie die Länge des Datensatzes stattfindet, wandelt sie in 32-Bit-Binär-, dass wandelt in Stücke von 8-Bit-Binär-, und wandelt dann jedes Stück zu seinem passenden Charakter. Die Zeichenfolge, die hier zurückgegeben wird, enthält die richtigen Zeichen, aber wenn sie in die Datei geschrieben wird, wird ein Zeichen nicht erkannt. Dies ist, wie ich es schreibe:
Vielleicht verwende ich die falsche Art der Codierung? Ich habe UTF-8 versucht, das sollte funktionieren, aber es gibt mir manchmal zusätzliche Zeichen.
Vielen Dank im Voraus für Ihre Hilfe.
Was ist der Charakter, der nicht richtig konvertiert? –
Da der Wert in ein Zeichen umgewandelt und dann so codiert wird, als wäre es ein echtes Zeichen, gibt es eine ganze Reihe von Werten, die nicht richtig funktionieren. Die meisten Werte über 127 wären wahrscheinlich falsch ... – Guffa