[英]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:使用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.