在插入到 SQL Server 数据库之前,从 Web 表单的哈希表中转换 UTF-8 编码 ASP.NET 数据

本文关键字:转换 哈希表 UTF-8 编码 数据 NET ASP 表单 Web Server SQL | 更新日期: 2023-09-27 18:31:57

我正在使用什么:
在我的 Asp.net WebForms 应用程序中,我从用户那里获取表单数据,然后将该数据插入到 SQL Server 数据库中。每个键都是表单中字段的标识符,值是用户接收的数据。

我的问题:
我的问题是用户将电子邮件等中的 UTF-8 数据复制并粘贴到"注释"字段中。SQL Server 数据库不将 UTF-8 识别为有效的字符数据。相反,它同时使用 UCS-2 和 ISO-8859-1 字符集。因此,这些字符集将作为问号 (?) 插入到数据库中。因此,我想将任何 UTF-8 字符正确转换为 UCS-2 或 ISO-8859-1。

问题:

  1. 我应该将 UTF-8 字符转换为 UCS-2 还是 ISO-8859-1?
  2. 在 ASP.NET Web 表单中,确定哈希表的"notes"键值中使用的字符集的最佳方法是什么?
  3. 将 UTF-8 字符转换为可接受的字符集的最佳方法是什么?

在插入到 SQL Server 数据库之前,从 Web 表单的哈希表中转换 UTF-8 编码 ASP.NET 数据

选项 1:使用 nvarchar

您可以将字段从 varchar 更改为 nvarchar,以便正确存储 unicode 字符。 这就是 nvarchar 数据类型的重点。 很酷。 使用它。

选项2:智能转换。

如果你有一个遗留的数据库,其中 nvarchar 根本不起作用,那么你可以创建一个字符串扩展,让你存储来自用户的值的 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;
    }
}

选择。。。犯 错。。。2A?:放弃前 30 个 ascii 代码(给予或接受)

我注意到,当用户从MAC word(和其他一些程序)复制/粘贴时,粘贴的数据包含前30个ascii字符中的字符。 除了 9、10 和 13 ...您可能可以放弃这些(它们只是 NUL 的 ACK 的 DC 和其他一些没有用户实际输入的垃圾)。