Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于保存在数据库中的ANSI编码字符串_C#_Database_Character Encoding - Fatal编程技术网

C# 用于保存在数据库中的ANSI编码字符串

C# 用于保存在数据库中的ANSI编码字符串,c#,database,character-encoding,C#,Database,Character Encoding,我正在开发一个爬虫程序,它可以打开文件并解析它们,然后将内容放入数据库 但是,对于包含奇数字符的文件,我遇到了一个问题,我想知道在将字符串放入数据库之前,是否有任何简单的方法来强制执行该字符串的ANSI编码,以确保没有非法字符 该项目是用C编写的,我用于将内容放入数据库的代码如下: cmd = new OleDbCommand("INSERT INTO TaIndex (IndexId, IndexTekst, IndexDato, IndexModulId, IndexModul, Index

我正在开发一个爬虫程序,它可以打开文件并解析它们,然后将内容放入数据库

但是,对于包含奇数字符的文件,我遇到了一个问题,我想知道在将字符串放入数据库之前,是否有任何简单的方法来强制执行该字符串的ANSI编码,以确保没有非法字符

该项目是用C编写的,我用于将内容放入数据库的代码如下:

cmd = new OleDbCommand("INSERT INTO TaIndex (IndexId, IndexTekst, IndexDato, IndexModulId, IndexModul, IndexFilsti) VALUES (?, ?, ?, ?, ?, ?);", conn);
cmd.Parameters.Add("IndexId", OleDbType.Integer).Value = newIdGetter();
cmd.Parameters.Add("IndexTekst", OleDbType.LongVarChar).Value = Text;
cmd.Parameters.Add("IndexDato", OleDbType.Date).Value = DateTime;
cmd.Parameters.Add("IndexModulId", OleDbType.VarChar).Value = ModuleId;
cmd.Parameters.Add("IndexModul", OleDbType.VarChar).Value = Module;
cmd.Parameters.Add("IndexFilsti", OleDbType.VarChar).Value = ((object)FilePath) ?? DBNull.Value;
问题在于来自文件的IndexTekst字段。

您可以尝试以下方法:

cmd.Parameters.Add("IndexTekst", OleDbType.LongVarChar).Value = Encoding.Default.GetString(Text);

或者可以使用Encoding在不同的编码之间进行转换。convert

嗯,您可以始终检查字符串是否可以被编码,然后重新解码为相同的值:

public static bool CanBeRoundTripped(Encoding encoding, string text)
{
    byte[] bytes = encoding.GetBytes(text);
    string decoded = encoding.GetString(bytes);
    return text == decoded;
}
在保存之前,在每个文本字段上调用它,然后考虑失败时要做什么…

是否有任何方法可以更改数据库架构以接受所有Unicode字符?在国际海事组织,这将是一个更令人愉快的方法


如果您确实需要使用某种ANSI编码,您应该准确地计算出您所指的编码。有很多编码通常被称为ANSI。您需要计算出您所指的代码页。

GetString不需要字符串,它需要字节。我还强烈建议不要使用Encoding.Default——它应该是指定的编码,而不是系统默认的编码。这可能与数据库排序规则不同。不要搞砸了。使dbase列类型为nvarchar并立即解决所有问题。db字段不是问题所在。应该检查它的编码方式。现在我使用Encoding.Default,但它只能在一台服务器上运行,所以不会造成太多麻烦。我并不在乎是否删除了一些非法字符,换句话说,不需要文本==decoded。db是MSACCESS,它在显示和更重要的是从设计器中删除数据方面存在问题。不幸的是,当数据包含ansi集合中不包含的字符时,这是一项要求。INSERT和SELECT都可以正常工作,但DELETE和UPDATE都有问题。所以我只想去掉所有非法字符,实际上我最终得到了一个扩展方法:public static string to anshis string s{return Encoding.Default.GetStringEncoding.Default.GetBytess;}。我知道这不是一个好的解决方案,但它是有效的,现在这是重要的部分。