转换一个已经畸形的字符串
Convert a String, which is already malformed
我有一个 class,它使用另一个读取文本文件的 class。
文本文件是用 Ascii 或明确的 CP1525 编写的。
背景资料:Textfile在Axapta中生成,使用ASCIIioclass,使用writeRaw方法写入文本
我用的class是一个同事用的,他用C# StreamReader读取文件。通常这可以正常工作,因为文件是用 UTF8 编写的,但在这种特殊情况下它不是。
因此 Streamreader 将文件读取为 UTF8 并将读取的字符串传递给我。
我现在有一些字母,例如带有分音符 (ö) 的 Lating 小写字母 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",在用流阅读器读取它之后,转换为 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);
那也returns字错了。
我知道我可以用这个解决问题:
using (StreamReader reader = new StreamReader(fileName, Encoding.Default, true))
但只是为了好玩:
如何从已经错误解码的字符串中获取正确的字符串?
首次进行 UTF8 到 ASCII 的转换后,所有未映射到有效 ASCII 条目的字符都将替换为相同的错误数据字符,这意味着数据刚刚丢失,您不能简单地 'convert' 回个好字顺流。看这个例子:https://dotnetfiddle.net/XWysml
我有一个 class,它使用另一个读取文本文件的 class。 文本文件是用 Ascii 或明确的 CP1525 编写的。
背景资料:Textfile在Axapta中生成,使用ASCIIioclass,使用writeRaw方法写入文本
我用的class是一个同事用的,他用C# StreamReader读取文件。通常这可以正常工作,因为文件是用 UTF8 编写的,但在这种特殊情况下它不是。
因此 Streamreader 将文件读取为 UTF8 并将读取的字符串传递给我。 我现在有一些字母,例如带有分音符 (ö) 的 Lating 小写字母 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",在用流阅读器读取它之后,转换为 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);
那也returns字错了。
我知道我可以用这个解决问题:
using (StreamReader reader = new StreamReader(fileName, Encoding.Default, true))
但只是为了好玩: 如何从已经错误解码的字符串中获取正确的字符串?
首次进行 UTF8 到 ASCII 的转换后,所有未映射到有效 ASCII 条目的字符都将替换为相同的错误数据字符,这意味着数据刚刚丢失,您不能简单地 'convert' 回个好字顺流。看这个例子:https://dotnetfiddle.net/XWysml