首先,大家好!这是我的第一篇文章!
我正在编写一个应用程序来读取和写入串行端口,一切正常,但由于在我公司我们有不同类型的扫描仪,它们配置了不同的前缀/后缀字符,其中大多数都有\r\n 序列。
所以我决定在我的 xml 配置文件中包含这个后缀,如下所示:
<rPortSuffix>\r\n</rPortSuffix>
当我读取我的xml文件时,我使用这个
case "rPortSuffix":
srPortSuffix = xmlReader.Value;
break;
问题是,当文本值传递给 srPortSuffix 时,变量存储的不是“\r\n”,而是“\\r\\n”,因此当我尝试读取串口时,没有任何反应由于不正确的后缀字符串(对于 NewLine 常量)
spRead.NewLine = srPortSuffix; //NewLine constant read in XML file
sReadData = spRead.ReadLine(); //Storing the read data
所以我尝试了:
srPortSuffix= Regex.Replace(srPortSuffix, @"\\", @"\");
但没有成功。有什么建议吗?
长话短说
如何使从 xml 文件中读取的“\r\n”值完全像那样读取,而不是“\\r\\n”?
编辑:
按照 Jirka Hanika 的建议,我只是将我的字符串从“\r\n”更改为 ascii 代码,如下所示:
<rPortSuffix> </rPortSuffix>
现在我的应用程序可以用于我正在测试的两种扫描仪。
谢谢!!
最佳答案
您可能会混淆实际的字符串数据和它们在 C# 源代码中的表示方式。当然,C# 语法不适用于 XML 文件,因此 \r\n
与换行序列没有任何关系。
您显示的代码不会将其转换为 \\r\\n
,但也不会将其转换为换行序列。
后者最简单的方法是:
srPortSuffix = srPortSuffix.Replace(@"\r", "\r").Replace(@"\n", "\n");
您基本上会做一些 C# 编译器通常为您做的事情,但完全在任何 C# 源代码之外。
还有一种更简单的替代方法,即不转换任何内容,直接将换行序列直接放入 XML 文件:
<rPortSuffix>
</rPortSuffix>
然而,这可能会被某些读者误解和/或破坏您 pretty-print 约定(结束标记不会缩进)。用 XML 编写相同内容的更脏但可能更实用的方法:
<rPortSuffix> </rPortSuffix>
关于C#如何读取\r\n字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11781810/