2014-01-09 70 views
0

我从SQL Server数据库中提取一些数据并将其写入文本文件,并且大部分过程按预期工作。有一个问题我一直无法解决。撇号显示为:’写入文本文件时出现撇号问题

下面是代码写入文件:

using (var writer = new StreamWriter(filePath, false)) 
{ 
    foreach (var textLine in dataList) 
    { 
     writer.WriteLine(textLine); 
    } 
} 

我对文字使用Encoding.DefaultEncoding.Utf8尝试过,但没有有所作为。

我打开记事本,Notepad ++和UltraEdit中的文件。

任何人都可以帮助我找出这个问题吗?

+2

它或者是坚持它的人的文化或将它拉出来 –

+0

@ARM一个深入渗透的,甚至是开创性的洞察力。 –

回答

2

你确定你试图存储一个真正的撇号(字符代码39),而不是一个智能引用字符? https://en.wikipedia.org/wiki/Quotation_mark_glyphs

+0

我不是。写入文件的文本可以通过多种方式输入(键入,复制/粘贴等)。在某些情况下,撇号显示正常,而在其他情况下,我会看到上面问题中显示的字符。 –

+0

如果有人复制粘贴,特别是如果从Word中这样做,他们很可能正在粘贴一个明智的报价。如有必要,您可能需要预先处理输入以进行转换。或者只是接受一个事实,即您可能需要存储宽字符。 –

+2

@RonS它看起来像你越来越卷曲撇号:http://stackoverflow.com/a/2477480/424129 –

0

’是字符为的UTF-8字节流,显示为具有Windows 1252代码页的ANSI字符。

UltraEdit应该没有问题来检测打开时创建的文本文件以UTF-8编码并显示正确。

有关在UltraEdit中如何自动检测UTF-8编码的详细信息,以及在配置中未启用自动检测的情况下如何打开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文本文件。