我有一个文本文件,其中包含以下字符串之一。
Match List ? I and List ? II and identify the correct code :
我在C#中有以下代码来读取这一行,当我在console.write它时,我得到了
– and - are different!
经过仔细审查,我明白了:
string filefullnamepath = @"E:\PROJECTS\NETSLET\Console\Console\files\sample.txt";
string filecontents = "";
using (StreamReader sr = System.IO.File.OpenText(filefullnamepath))
{
filecontents = sr.ReadToEnd();
}
现在我如何阅读文件并准确地获取文件?我需要将数据存储在数据库中。
我的代码:
Console.OutputEncoding = System.Text.Encoding.UTF8;
好的,我添加了以下一行:
Save()
我需要将内容存储在数据库中。即使在数据库中它也存储为?我正在使用ms-sql server 2018r2
答案 0 :(得分:1)
首先,检查你读了什么(你有正确的编码吗?):
string path = @"E:\PROJECTS\NETSLET\Console\Console\files\sample.txt";
// Easier way to read than Streams
string fileContent = File.ReadAllText(path);
string dump = string.Concat(fileContent
.Select(c => c < 32 || c > 127
? $"\\u{(int)c:x4}" // Encode command chars and unicode ones
: c.ToString())); // preserve ASCII intact
Console.Write(dump);
如果你得到(请注意\u2013
个字符)
Match List \u2013 I and List \u2013 II and identify the correct code :
然后读取是正确的,并且输出是错误的。您应该更改正在使用的字体。如果转储不像上面那样,但是(请注意?
):
Match List ? I and List ? II and identify the correct code :
这意味着系统无法读取字符,因此将其替换为?
;所以问题在于阅读,是在编码中。尝试明确地说明
// Utf-8
string fileContent = File.ReadAllText(path, Encoding.UTF8);
...
// Win-1250
string fileContent = File.ReadAllText(path, Encoding.GetEncoding(1250));
修改:更糟糕的情况是,当您无法保存具有所需编码的文件时,您必须猜测您可以尝试自动化该过程的原始文件:
string path = "";
var tries = Encoding.GetEncodings()
.Select(encoding => new {
encoding = encoding,
text = File.ReadAllText(path, encoding.GetEncoding()),
} )
.Select(item => $"{item.encoding.Name,-8} => {item.text} <- {(item.text.Any(c => c == 0x2013 ? "got it!" : "wrong"))}");
Console.WriteLine(string.Join(Environment.NewLine, tries));
可能的输出:
IBM037 => Match List ? I and List ? II and identify the correct code : <- wrong
IBM437 => Match List ? I and List ? II and identify the correct code : <- wrong
...
windows-1250 => Match List – I and List – II and identify the correct code : <- got it!
...
utf-8 => Match List ? I and List ? II and identify the correct code : <- wrong