ñ;放入文件中的字符被解释为ñ;在C#控制台应用程序中

本文关键字:#241 应用程序 控制台 解释 #177 #195 字符 文件 | 更新日期: 2023-09-27 18:26:36

我看到过两个字符相同的问题,但注意到这与这个特定的问题有关,所以这里开始。

我正在运行一个C#控制台应用程序,它读取一个可变长度记录的输入文件。每条记录都是可变长度字段。在解析每个记录中的每个单独字段方面,我已经完成了所有工作,这不是问题。除了今天我浏览了输入文件中的字符。现在我知道这可以翻译成ñ,所以我可以接受。然而,因为我在输入文件中看到的是2个字符,所以C#应用程序中的记录长度会发生变化,因为该应用程序将这2个字符解释为单个ñ。这导致我的记录长度从154个字符变为153个字符,然后在解析过程中,弄乱了各个字段。

我同意将ñcharacter存储在我的数据库中。但我的问题是。

在解析记录中的字段之前,我如何轻松地(检查每个字符)检测到ñ的存在并触发它来更改解析逻辑?我应该简单地对字符执行IndexOf并以这种方式进行编码吗?我认为这会增加一点开销,因为我必须在每个字段上都使用这种逻辑,尽管这似乎是最简单的方法。我认为总的来说有更好的方法来处理它,但我以前从未遇到过这种情况。我发现的大多数帖子更多的是处理文本中的ñ字符,而不是将文本(正确地)从?转换为ñ

想法?

我使用的streamreader open如下:

System.IO.StreamReader concatenatedFile=新的System.IO.StreamReader("c:''Testing''test.txt",System.Text.Encoding.UTF8);

记录长度从输入的154个字符变为153个解释字符。

ñ;放入文件中的字符被解释为ñ;在C#控制台应用程序中

您必须始终以编写的编码读取文本文件。当然,有时你不知道那是哪种编码。。。

作为字节流的输入文件的内容。大多数是1字节-1-ASCII-字符,但也有2个字节(可能)可以根据编码进行不同的解释:

  • UTF8-1个字符,ñ
  • (某些其他编码)-2个字符,ñ
    由于您说"输入文件显示为2个字符",这可能是生成文件的人想要的编码

所以,你应该找出哪种编码最初的意思,并使用它——它可能是一些ANSI编码。您可以尝试System.Text.Encoding.Default,但要注意,这在不同的机器上会发生变化,因此您的代码现在将取决于机器的默认编码。

您应该将用于读取输入文件的StreamReader设置为UTF-8编码。我一秒钟都不相信原始输入应该是",那么你为什么在乎原始输入是多少字节呢?你在乎字符长度,对吧?

请参阅本文,了解文本编码中的内容:http://www.joelonsoftware.com/articles/Unicode.html。