Sql server 字符串编码问题

Sql server 字符串编码问题,sql-server,asp.net-mvc,spark-view-engine,Sql Server,Asp.net Mvc,Spark View Engine,我在数据库中存储字符串的方式上遇到了一个非常奇怪的问题,因此,我在Javascript中遇到了这些“未终止的字符串文字”错误 以下是我所做工作的概述: 平台:C#/ASP.NET MVC 1.0、SQL Server 2005、SparkViewEngine、YUI 2 在我看来,我使用NewtonSoft中的JSON.NET将对象序列化为JSON数据结构 <script type="text/javascript"> // <![CDATA[ var dat

我在数据库中存储字符串的方式上遇到了一个非常奇怪的问题,因此,我在Javascript中遇到了这些“未终止的字符串文字”错误

以下是我所做工作的概述:

平台:C#/ASP.NET MVC 1.0、SQL Server 2005、SparkViewEngine、YUI 2

在我看来,我使用NewtonSoft中的JSON.NET将对象序列化为JSON数据结构

<script type="text/javascript">
    // <![CDATA[ 
    var data = YAHOO.lang.JSON.parse("${Newtonsoft.Json.JsonConvert.Serialize(Model)}");
    ....
</script>

// 
正常情况下,这是可行的,但我注意到我从数据库中提取的一个字段包含以下数据,这导致字符串的格式不正确

数据库字段是一个NVARCHAR(2000)

对于某些条目,当我从数据库复制并粘贴到记事本时,字符串中会出现这些奇怪的字符

编译分析和建议?甲板

在Firebug中,它显示为一组换行符:

分析与建议甲板,“开始日期”为“1/19/10”,“完成日期”为“1/26/10”,“持续时间”为6.0

编译
分析
& 
建议
 甲板

更新 在与用户交谈之后,我发现他们正在使用从word文档复制和粘贴到HTML表单的方法

表单本身使用YUI连接管理器进行异步POST调用(AJAX)以保存表单值。 数据库保存表单字段值以及与其关联的任何编码


Word中似乎有可打印的字符,但ASCII中没有。有没有办法检测并正确编码?

这似乎是因为您没有正确处理引号字符。你有好几条路要走。我为我们的网站评论的方式是确保所有的引号都是编码的,包括单引号和双引号,这样您的SQL、ASPX和Javascript都不会出错。 我们的方法是针对客户评论字段,因此我们在转换方面做得太过分了。

Function SafeComment(ByVal strInput)
' Renders Any Comment Codes Harmless And Leaves Them HTML readable In An eMail Or Web Page
' Try: SafeComment("`~!@#$%^&*()_+=-{}][|\'"";:<>?/.,")
    SafeComment = ""
    If Len(strInput) = 0 Then Exit Function
    SafeComment =   Replace(Replace(Replace( _
                    Replace(Replace(Replace( _
                    Replace(Replace(Replace( _
                    Replace(Replace(Replace( _
                        Server.HtmlEncode(Trim(strInput)), _
                    "-", "&#45;"), ":", "&#58;"), "|", "&#124;"), _
                    "`", "&#96;"), "(", "&#40;"), ")", "&#41;"), _
                    "%", "&#37;"), "^", "&#94;"), """", "&#34;"), _
                    "/", "&#47;"), "*", "&#42;"), "'", "&#39;")
End Function
函数安全注释(ByVal strInput)
'使任何注释代码无害,并使它们在电子邮件或网页中具有HTML可读性
'Try:SafeComment(“`~!@$%^&*()\+=-{}][\\'”;:?/,”)
SafeComment=“”
如果Len(strInput)=0,则退出函数
SafeComment=替换(替换(_
替换_
替换_
替换_
HtmlEncode(Trim(strInput))_
"-", "-"), ":", ":"), "|", "|"), _
"`", "`"), "(", "("), ")", ")"), _
"%", "%"), "^", "^"), """", """), _
"/", "/"), "*", "*"), "'", "'")
端函数

这并不漂亮,但它确实起到了作用。

谢谢。我认为问题在于用户复制并粘贴了一个不可打印ASCII字符的字符。在这种情况下,我们将unicode字符作为ASCII字符,然后将生成的8位字符映射到相应的7位可打印ASCII字符。更准确地说,用户从word文档粘贴到表单上。我不确定粘贴了哪些字符,但它们导致字符串未正确终止;您提到的解决方案适用于此类情况吗?再次感谢!对于这种情况,我们使用了一个函数,将x20到x7e范围内的所有字符映射到x20到x7e范围内。这个函数更糟糕。我创建了一个Characterizer值数组。代码对该字符执行ASC(),并转到数组中的该位置以创建输出字符。我们必须这样做,因为MS Dynamics数据映射将不接受该范围之外的任何字符。任何未映射的字符都将被忽略。