C#:sql表数据文本有'';代替'é';复制后

本文关键字:代替 #233 复制 sql 数据 文本 | 更新日期: 2023-09-27 18:20:38

我正在进行SQL表数据复制。首先,我从csv文件(从sql表获得)中获取所有数据,在csv文件中,我正确地得到了"é",但当我将其插入表中时,我得到了"?"在sql表中。我不使用任何编码,所以一切都是默认的。有人知道为什么会发生这种事吗?

已解决:

需要这样读取csv:

string[] csvlines = File.ReadAllLines("C:''export.csv",Encoding.GetEncoding("Windows-1252"));

感谢

C#:sql表数据文本有'';代替'é';复制后

一般来说,您应该使用创建表时使用的任何编码(或上次修改时使用的编码-对于挑剔者)。如果在不同的表之间传输数据,则可能需要使用不同的编码来读取和写入数据。

.NET框架提供了一个实现编码的丰富列表,您可以在以下类型中找到:System.Text.Encoding

更新

请使用Notepad++确定正在读取数据的.CSV文件的编码。然后在StreamReader对象的构造函数中使用该Encoding。

因此,如果记事本++告诉文件是用UTF-8编码的,请使用以下代码行从文件中读取:

using(var reader = new StreamReader(new FileStream("myCSVfile.txt", FileMode.Open, FileAccess.Read), Encoding.UTF8)
{
  // read file content here
}
MSDN:操作系统当前ANSI代码页的编码。我建议您在数据库中使用nvarcharnchar数据类型,并在字符串值之前使用N,如:N'الله'

我认为您正在寻找这个字符的UTF-8。

我不太熟悉c#,但这个链接看起来是的一个良好开端

http://startbigthinksmall.wordpress.com/2009/01/20/utf8encodingdefault-encodingutf8-net-c/来自文章:

看起来像UTF8Encoding.Default将返回UTF8编码,对吗?

事实并非如此——它返回操作系统的默认ANSI编码。

与ASCIIEncoding.Default、UnicodeEncoding.Default相同,UTF32Encoding.Default和UTF7Encoding.Default!

为什么?因为它们都派生自System.Text.Encoding,其中Default定义: