1

我有一个 ASP Classic 应用程序,它允许人们将 Word 文档复制并粘贴到常规表单字段中。然后我通过 jQuery Ajax 将该文档发布到保存信息的 SQL Server。

我的问题是花引号和其他单词字符在它们回来时会变成奇怪的字符。

我试图在我的保存例程(经典的 asp 存储过程)中过滤它们,但我仍然不能完全消除这些问题。

ASP 页面有这个带有 ISO-8859-1 字符集的标题。将字符粘贴到文本输入字段时看起来不错。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

我的 jQuery 代码在 ASP 页面中构建以下 JSON:

var jsonToSend = { serial: serial, critiqueText: escape(critiqueText) };

数据库排序规则设置为SQL_Latin1_General_CP1_CI_AS

我使用 TEXT 和VARCHAR字段来保存文本(是的,我知道 Text 字段类型不是首选,但这是我现在拥有的)。

我必须在每一点做什么来确保 (1) Word 字符被剥离,以及 (2) 编码前后一致,所以我不会显示任何奇怪的字符?

哦- ASP Classic 3 在 Windows Server 2003 上以 32 位模式运行,针对 SQL Server 2005。

4

3 回答 3

0

快速而肮脏的解决方案是在后端数据库中使用 nvarchar 和 ntext。您提到的奇怪字符是编码问题。例如见下面的例子。

  • İiıIÜĞ 土耳其语 win-1254
  • Ä°iıIÃœÄ 在正常 ANSI
  • C4B069C4B149C39CC49E 它们都具有相同的十六进制值。

您在网页中使用 ISO-8859-1 编码。这意味着您只能保存仅是完整 unicode 的前 256 位的 ASCII 字符。看到这个答案。您在数据库中使用 Latin1。大约这三个字符集是相等的。Latin1-General = Win 1252 = IEC_8859-1

  ISO/IEC_8859-1 is the basis for most popular 8-bit character sets, including Windows-1252 and the first block of characters in Unicode.

  SQL_Latin1_General_CP1_CI_AS:- Latin1-General, case-insensitive, accent-sensitive, kanatype-insensitive, 
  width-insensitive for Unicode Data, SQL Server Sort Order 52 on Code Page 1252 for non-Unicode Data

这意味着您输入到数据库前 256 位值的任何字符都是安全的。如果您知道客户端的默认编码。我建议尝试这种默认编码,看看是否可以恢复一些信息。我在土耳其举了一个例子,我知道大多数客户使用 Win1254,因此我会尝试将值更改为该编码,看看我可以恢复任何东西。

您回答的第二部分是您可以安全地从 varchar 更改为 nvarchar 而不会丢失信息。在这里,不丢失信息的这将是第一部分十六进制值(第一个 256 值)。你的奇怪字符会保留,但其他角色会保留。

这个答案链接的文章提供了更多信息。

于 2013-02-01T09:31:17.870 回答
0
于 2013-02-03T10:51:30.010 回答
0

I deal with importing of crazy characters into SQL all day long and nvarchar is the way to go. Unless they're numbers or something of that sort I set the columns to nvarchar(max) so I won't have to deal with it. The only exception you have to keep in mind is if you're going to use Foreign Keys then you'll have to set it to nvarchar(450). This handles all kinds of crazy characters, spacing, and gaps in text as the result of tabs.

于 2013-02-06T18:00:24.753 回答