C# 在插入SQL Server数据库之前,从ASP.NET Webform的哈希表转换UTF-8编码数据
我的工作内容:C# 在插入SQL Server数据库之前,从ASP.NET Webform的哈希表转换UTF-8编码数据,c#,asp.net,sql-server,utf-8,webforms,C#,Asp.net,Sql Server,Utf 8,Webforms,我的工作内容: 在我的Asp.net Webforms应用程序中,我从用户获取表单数据,然后将该数据插入SQL Server数据库。每个键是表单中字段的标识符,值是用户接收的数据 我的问题: 我的问题是,用户正在将电子邮件等中的UTF-8数据复制和粘贴到“备注”字段中。SQL Server数据库无法将UTF-8识别为有效的字符数据。相反,它同时使用UCS-2和ISO-8859-1字符集。因此,这些字符集将作为问号(?)插入到数据库中。因此,我想正确地将任何UTF-8字符转换为UCS-2或ISO-
在我的Asp.net Webforms应用程序中,我从用户获取表单数据,然后将该数据插入SQL Server数据库。每个键是表单中字段的标识符,值是用户接收的数据 我的问题:
我的问题是,用户正在将电子邮件等中的UTF-8数据复制和粘贴到“备注”字段中。SQL Server数据库无法将UTF-8识别为有效的字符数据。相反,它同时使用UCS-2和ISO-8859-1字符集。因此,这些字符集将作为问号(?)插入到数据库中。因此,我想正确地将任何UTF-8字符转换为UCS-2或ISO-8859-1 问题:
选项1:使用nvarchar 您可以将字段从varchar更改为nvarchar,以便正确存储unicode字符。这就是问题所在。很酷。使用它 选项2:智能转换。 如果您有一个传统的数据库,nvarchar根本无法工作,那么您可以创建一个字符串扩展,让您存储用户提供的ascii版本的值。下面是一个这样的扩展(请注意,在删除所有非ascii字符之前,我们正在对“智能”引号/etc进行一些初始替换) 如果你支持国际(口音,等等),那么这有点文化上的不敏感(“呸-远离你疯狂的口音标记和奇怪的非英语字母”)
公共静态类StringExt{
静态公共字符串TRYGETASCISTRING(此字符串为原始字符串){
//将这些msword“智能”字符替换为ascii(哑)字符。
字符串转义=System.Convert.ToString(p\u字符串.Replace('\u2013','-')。Replace('\u2014','-')。Replace('\u2015','-')。Replace('\u2017','.'''\u2018','\'')。Replace('\u2019','\'')。Replace('\u201a',','-')。Replace('\u201b','\'''''.'''''-')。Replace('\u201c','''''''.\)。Replace('\u201d',''.'''''''.'''''.\'.Replace('.Replace('\u201d',''.Replace('\u201d','.''''''.Replace('.Replace('.''.Replace(('\u2032','\''。替换('\u2033','\'');
//正则表达式将输出所有其他非ascii字符。
expected=Regex.Replace(p\u sVal,“[^A-Za-z 0-9\,\?\”!@\\\$%\^&*\(\\)-:\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
//一切就绪。。
返回逃逸;
}
}
选项…错误…2A?:放弃前30个ascii码(给予或接受)
我注意到,当用户从MAC word(和其他一些程序)复制/粘贴时,粘贴的数据在前30个ascii字符中包含字符。除了9、10和13…您可能可以丢弃这些字符(它们只是NUL的ACK的DC和其他一些用户实际上不会键入的垃圾)。选项1:使用nvarchar 你可以把你的字段从varchar改为nvarchar,这样你的unicode字符就可以正确存储了。这很酷。使用它吧 选项2:智能转换。 如果您有一个传统的数据库,nvarchar根本无法工作,那么您可以创建一个字符串扩展名,用于存储用户提供的ascii版本的值。下面是一个这样的扩展名(请注意,在删除所有非ascii字符之前,我们正在对“智能”引号/etc进行一些初始替换) 如果你支持国际(口音,等等),那么这有点文化上的不敏感(“呸-远离你疯狂的口音标记和奇怪的非英语字母”)
公共静态类StringExt{
静态公共字符串TRYGETASCISTRING(此字符串为原始字符串){
//将这些msword“智能”字符替换为ascii(哑)字符。
字符串转义=System.Convert.ToString(p\u字符串.Replace('\u2013','-')。Replace('\u2014','-')。Replace('\u2015','-')。Replace('\u2017','.'''\u2018','\'')。Replace('\u2019','\'')。Replace('\u201a',','-')。Replace('\u201b','\'''''.'''''-')。Replace('\u201c','''''''.\)。Replace('\u201d',''.'''''''.'''''.\'.Replace('.Replace('\u201d',''.Replace('\u201d','.''''''.Replace('.Replace('.''.Replace(('\u2032','\''。替换('\u2033','\'');
//正则表达式将输出所有其他非ascii字符。
expected=Regex.Replace(p\u sVal,“[^A-Za-z 0-9\,\?\”!@\\\$%\^&*\(\\)-:\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
//一切就绪。。
返回逃逸;
}
}
选项…错误…2A?:放弃前30个ascii码(给予或接受)
我注意到,当用户从MAC word(和其他一些程序)复制/粘贴时,粘贴的数据在前30个ascii字符中包含字符。除了9、10和13之外……您可能可以丢弃这些字符(它们只是NUL的ACK的DC和其他一些用户不会实际键入的垃圾).您是在寻找将其转换为ascii的方法,以便将其保存到文本字段中,还是希望将数据“粘贴”保存?您是在寻找将其转换为ascii的方法,以便将其保存到文本字段中,还是希望将数据“粘贴”保存?
public static class StringExt {
static public string TryGetAsciiString(this string original) {
//Replace those msword "smart" characters with ascii (dumb) characters.
string escaped = System.Convert.ToString(p_String.Replace('\u2013', '-').Replace('\u2014', '-').Replace('\u2015', '-').Replace('\u2017', '_').Replace('\u2018', '\'').Replace('\u2019', '\'').Replace('\u201a', ',').Replace('\u201b', '\'').Replace('\u201c', '\"').Replace('\u201d', '\"').Replace('\u201e', '\"').Replace("\u2026", "...").Replace('\u2032', '\'').Replace('\u2033', '\"'));
//regex out all those other non-ascii characters.
escaped = Regex.Replace(p_sVal, "[^A-Za-z 0-9 \\.,\\?\'\"!@#\\$%\\^&\\*\\(\\)-_=\\+;:<>\\/\\\\\\|\\}\\{\\[\\]`~\\n\\r]*", "");
//All set..
return escaped;
}
}