У меня есть класс, который использует другой класс, который читает текстовый файл. Текстовый файл написан в Ascii или должен быть прозрачным CP1525.Преобразование строки, которая уже некорректна
Информацияфона: текстового файла генерируется в Axapta и использует класс ASCIIio который записывает текст с помощью метода writeRaw
Класс, который я использую на коллегу, и он использует C# StreamReader для чтения файлов. Обычно это работает нормально, потому что файлы написаны в UTF8, но в этом конкретном случае это не так.
Таким образом, Streamreader считывает файл как UTF8 и передает мне прочитанную строку. Теперь у меня есть несколько букв, например, маленькая буква Lating с Diaeresis (ö), которые не сформированы так, как мне бы хотелось.
Простой конвертер строки в этом случае не помогает, и я не могу понять, как я могу получить правильные буквы.
Так что это в основном, как он читает:
char quotationChar = '"';
String line = "";
using (StreamReader reader = new StreamReader(fileName))
{
if((line = reader.ReadLine()) != null)
{
line = line.Replace(quotationChar.ToString(), "");
}
}
return line;
Что теперь происходит, в Textfile у меня есть немецкое слово «ROHRE», который, прочитав его с StreamReader, превращающий в Rhre (который выглядит глупо в базе данных).
Я мог бы попытаться преобразовать каждую букву
Encoding enc = Encoding.GetEncoding(1252);
byte[] utf8_Bytes = new byte[line.Length];
for (int i = 0; i < line.Length; ++i)
{
utf8_Bytes[i] = (byte)line[i];
}
String propEncodeString = enc.GetString(utf8_Bytes, 0, utf8_Bytes.Length);
Это не дает мне правильный характер!
byte[] myarr = Encoding.UTF8.GetBytes(line);
String propEncodeString = enc.GetString(myarr);
Это также возвращает неправильный символ.
Я знаю, что я мог бы просто решить эту проблему с помощью этого:
using (StreamReader reader = new StreamReader(fileName, Encoding.Default, true))
Но просто для удовольствия: Как я могу получить нужную строку из уже неправильно декодированного строки?
Я пришел из ASCII и преобразовал его в UTF8, а не наоборот. Но проблема остается той же, что я знаю. – Bongo
@Bongo UTF8 имеет символ «Я не знаю, что это», который использует для замены неправильно понятых байтов. Это как раскрасить странные кусочки изображения красным цветом, а затем спросить, что находится под ним? –