转换字符串,该字符串的格式已经不正确

本文关键字:字符串 不正确 格式 转换 | 更新日期: 2023-09-27 17:59:12

我有一个类,它使用另一个读取文本文件的类。文本文件是用Ascii编写的,或者要清除CP1525。

背景信息:文本文件在Axapta中生成,并使用ASCIIio类,该类通过使用writeRaw方法写入文本

我正在使用的类是由一个同事创建的,他正在使用C#StreamReader读取文件。通常情况下,这可以正常工作,因为文件是用UTF8编写的,但在这种特殊情况下,情况并非如此。

因此,Streamreader以UTF8读取文件,并将读取的字符串传递给我。我现在有一些字母,比如带有分音符(ö)的拉丁小写字母o,它们的格式并不像我需要的那样。

在这种情况下,简单的字符串转换没有帮助,我也不知道如何获得正确的字母。

所以他基本上就是这样读的:

char quotationChar = '"';
String line = "";
using (StreamReader reader = new StreamReader(fileName))
{
    if((line = reader.ReadLine()) != null)
    {
        line = line.Replace(quotationChar.ToString(), "");
    }
}
return line;

现在的情况是,在文本文件中,我有一个德语单词"Röhre",在用streamreader阅读后,它会转换为R�hre(在数据库中看起来很愚蠢)。

我可以尝试转换每个字母的

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))

但只是为了好玩:如何从已经错误解码的字符串中获得正确的字符串

转换字符串,该字符串的格式已经不正确

一旦首次进行UTF8到ASCII的转换,所有未映射到有效ASCII条目的字符都将替换为相同的坏数据字符,这意味着数据刚刚丢失,您不能简单地"转换"回下游的好字符。请参见此示例:https://dotnetfiddle.net/XWysml