簡體   English   中英

在插入SQL Server數據庫之前,先從ASP.NET Webform哈希表轉換UTF-8編碼數據

[英]Converting UTF-8 Encoded Data from Hashtable of ASP.NET Webform Before Inserting Into SQL Server Database

我正在使用的是:
在我的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表單中,確定散列表的“注釋”鍵的值內使用的字符集的最佳方法是什么?
  3. 將UTF-8字符轉換為可接受的字符集的最佳方法是什么?

選項1:使用nvarchar

您可以將字段從varchar更改為nvarchar,以便正確存儲Unicode字符。 這就是該nvarchar數據類型的重點 這個很酷。 用它。

選項2:智能轉換。

如果您有一個傳統的數據庫,而nvarchar根本無法使用,那么您可以創建一個字符串擴展名,該擴展名允許您存儲用戶的值的ascii版本。 下面是一個這樣的擴展名(請注意,在放棄所有不是ascii的字符之前,我們正在對“ smart”引號/ etc進行一些初始替換)。

如果您支持國際語言(重音符號等),那么這在文化上有點不敏感(““-遠離您瘋狂的重音符號和奇怪的非英語字母”)。

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和其他用戶無法鍵入的其他垃圾)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM