Moin,
ich habe ein Problem mit der De-/serialisierung von deutschen Umlauten.
C#-Code: |
List<Country> countries1 = new List<Country>
{
new Country
{
Name = "Ägypten"
}
};
string json = JsonSerializer.Serialize(countries1);
List<Country> deserializedCountry = JsonSerializer.Deserialize<List<Country>>(json);
|
Funktioniert wunderbar. Ägypten steht wieder ganz normal drin.
Im Json selbst, steht dann der String:
[{"Id":"53b1b01c-2a33-48ee-9f21-c0a20f6f96bc","Name":"\u00C4gypten","ISOAlpha2":null,"ISOAlpha3":null,"States":null,"Sources":null}]
Weil der den Umlaut encoded. Das passt ja alles.
Wenn ich das ganze dann aber erweiter:
C#-Code: |
using StreamReader sr = new StreamReader("Countries.csv", Encoding.UTF8);
string line;
int skipLine = 2;
List<Country> countries = new List<Country>();
while ((line = sr.ReadLine()) != null)
{
if (skipLine > 0)
{
skipLine--;
continue;
}
string[] values = line.Split(";");
countries.Add(new Country
{
Name = values[0],
ISOAlpha2 = values[1],
ISOAlpha3 = values[2]
});
}
json = JsonSerializer.Serialize(countries);
deserializedCountry = JsonSerializer.Deserialize<List<Country>>(json);
|
Sind alle Länder der Welt round about 270 stk.
Hier im Json steht der String drin (Ausschnitt)
{"Id":"5e150fc7-a81e-41c1-a87f-d9fcc80be1de","Name":"\uFFFDgypten","ISOAlpha2":"EG","ISOAlpha3":"EGY","States":null,"Sources":null},
Hier encoded der das "Ä" anders.
Und wenn ich es dann wieder deserialisiere kommt das raus:
"?gypten".
Aber wie kann ich das umgehen? Bzw. was genau ist das Problem?
Google hat auch nicht geholfen, weder zu Json.NET (was hier verwendet wird) noch zu Newtonsoft.
Ziel ist im Endeffekt, mir eine Json Datei zu erstellen, die von einem anderen Programm eingelesen wird.
Edit:
Die csv Datei ist exportiert von xlsx via Excel.
Aber nachdem ich es gepostet habe, habe ich bemerkt, dass es am Encoding vom StreamReader liegt.
Aber müsste UTF-8 nicht korrekt sein?
Dann ist es gleich zu diesen
Thema
Wo UTF-7 die Lösung ist.