gpt4 book ai didi

c# - 使用 OleDbConnection 从文本文件中读取特殊字符

转载 作者:太空宇宙 更新时间:2023-11-03 13:02:05 24 4
gpt4 key购买 nike

我在使用 OleDbConnection 从文本文件中读取非 ASCII 字符时遇到问题。有任何想法吗?

这是我用来重现问题的测试方法:

[TestMethod]
public void TestMethod1()
{
var arquivo = new FileInfo(@"P:\import.txt");

string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"{0}\\\";Extended Properties=\"Text;IMEX=1;FMT=Delimited\"", arquivo.DirectoryName);
var conexaoFonteDados = new OleDbConnection(connectionString);
conexaoFonteDados.Open();

string instrucaoSql = "SELECT * FROM [" + arquivo.Name + "]";

var com = new OleDbCommand(instrucaoSql, conexaoFonteDados);
if (com.Connection.State != ConnectionState.Open)
{
com.Connection.Open();
}

var drDadosImportacao = com.ExecuteReader(CommandBehavior.CloseConnection);
while (drDadosImportacao != null && drDadosImportacao.Read())
{
object valorImportado = drDadosImportacao["Column"];
Console.WriteLine(valorImportado);
}
}

import.txt 文件内容如下:

Column
a
b
ç
á

这是控制台的输出:

a
b
?
?

解决方案

如前所述here ,您可以使用类似于此的方法将字符串转换为正确的编码:

public static class MyStringExtensions
{
private static readonly Encoding Iso = Encoding.GetEncoding("ISO-8859-1");
public static string RepairUtf8(this string value)
{
byte[] bytes = Iso.GetBytes(value);

return bytes.Any(o => o.Equals(195)) ? Encoding.UTF8.GetString(bytes) : value;
}
}

最佳答案

首先,您需要弄清楚您的文本文件使用的编码方式。然后在连接字符串中指定文本编码。

例如,这将是您的连接字符串,它还指定了 UTF-8 编码 (CharacterSet)。将 UTF8 替换为您的文本文件使用的实际编码:

string connectionString = string.Format(
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"{0}\\\";Extended Properties=\"Text;CharacterSet=UTF8;IMEX=1;FMT=Delimited\"",
arquivo.DirectoryName
);

自从我使用 OleDB 以来已经有一段时间了,我不能确定 Microsoft.ACE.OLEDB 提供者是否理解编码的名称,例如 UTF8、ISO-8859-1 等...如果它似乎不起作用,请尝试指定 codepage identifier of the encoding而不是编码名称(例如,您可以指定“CharacterSet=65001”而不是“CharacterSet=UTF8”)。

关于c# - 使用 OleDbConnection 从文本文件中读取特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32019546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com