显示将CSV导入DataGridView的扩展字符



我正在使用Visual Studio 2019,并使用C#制作桌面应用程序。

基本上,我正在尝试将CSV文件导入DataGridView。当我运行程序时,一切都正常,除了有特殊的字符显示为?块。该文件使用Windows-1252(西欧(字符映射。这是一个游戏文件(该程序旨在帮助我更有效地修改游戏(,所以我不能只是更改文件的编码。

我使用的是我在StackOverflow上找到的csvParser解决方案——我发布了在单击按钮后将数据发送到表的代码。

正如您所看到的,我尝试将"Encoding.UTF8"添加到TextFieldParser中,但没有帮助。

我也尝试过更改表中使用的字体,但我尝试了几种Unicode字体,但都没有帮助(目前使用Segoe UI(。

希望有人能帮忙!

{
string path = "C:\Users\user\Documents\Paradox Interactive\Europa Universalis IV\mod\testmod\map";
openFileDialog1.InitialDirectory = path;
openFileDialog1.Title = "Open Definitions File";
openFileDialog1.ShowDialog();
path = openFileDialog1.FileName;
using (TextFieldParser csvParser = new TextFieldParser(path, Encoding.UTF8))
{
csvParser.CommentTokens = new string[] { "#" };
csvParser.SetDelimiters(new string[] { ";" });
csvParser.HasFieldsEnclosedInQuotes = false;
csvParser.ReadLine();
while (!csvParser.EndOfData)
{
string[] fields = csvParser.ReadFields();
string defID = fields[0];
string defRed = fields[1];
string defGreen = fields[2];
string defBlue = fields[3];
string defProvince = fields[4];
string defBlank = fields[5];
string[] row0 = { defID, defProvince, defRed, defGreen, defBlue, defBlank };
defData.Rows.Add(row0);
}
}
}

只需使用Encoding.GetEncoding(1252)作为构造函数的第二个参数,即replace:

using (TextFieldParser csvParser = new TextFieldParser(path, Encoding.UTF8))

带有:

using (TextFieldParser csvParser = new TextFieldParser(path, Encoding.GetEncoding(1252))

最新更新