我从SQL Server数据库中提取一些数据并将其写入文本文件,并且在大多数情况下,该过程按预期工作。有一个问题我一直无法解决。撇号显示为:’
。
以下是写入文件的代码:
using (var writer = new StreamWriter(filePath, false))
{
foreach (var textLine in dataList)
{
writer.WriteLine(textLine);
}
}
我尝试在文字上使用Encoding.Default
和Encoding.Utf8
,但这没有任何区别。
我在记事本,Notepad ++和UltraEdit中打开文件。
任何人都可以帮我识别这个问题吗?
答案 0 :(得分:2)
您确定要尝试存储真正的撇号(字符代码39)而不是其中一个智能引号字符吗? https://en.wikipedia.org/wiki/Quotation_mark_glyphs
答案 1 :(得分:0)
’
是字符’
的UTF-8字节流,在Windows 1252代码页中显示为ANSI字符。
UltraEdit应该没有问题来检测打开时创建的文本文件以UTF-8编码并显示正确。
有关如何在UltraEdit中自动检测UTF-8编码的详细信息,请参阅我在bad character encoding after xsl 1.0 transform的答案,以及如果在配置中未启用自动检测,您可以采取哪些措施来打开UTF-8编码文件( 高级 - 配置 - 文件处理 - Unicode / UTF-8检测)或当第一个UTF-8字符不在前64 KB内时失败。
在将数据列表的行写入文本之前,首先将3字节0xEF 0xBB 0xBF显示为ANSI字符串
,然后将文件写入文件,以帮助文本编辑器检测文件的UTF-8编码文件。 0xEF 0xBB 0xBF是以UTF-8编码的文件的字节顺序标记(BOM),由文本编辑器识别但不显示。
字符’
在代码页Windows 1252(十六进制值0x92)中也可用,因此也可以通过UTF-8到ANSI的转换存储在文本文件中。但是数据列表可能还包含系统代码页中不可用的Unicode表中的字符,因此最好将文件创建为UTF-8编码的文本文件,而不是ANSI文本文件。