为什么我的中文字符在c#字符串中无法正确显示

Sea*_*ean 4 c# sql-server asp.net

我将中文和英文文本存储在SQL Server 2005数据库中并将其显示在网页上,但中文未正确显示.我一直在阅读有关该主题的内容,并做了以下工作:

  • 在我的INSERT语句中使用N之前的文本
  • 将字段类型设置为nvarchar
  • 将页面的charset设置为UTF-8

当我将它们直接插入到页面中时,正确地在页面中显示中文字符,即不从数据库中获取它们

这些是应该显示的字符:全澳甲流确诊病例已破100

这是从数据库中检索文本时显示的内容:å...ææ¾³ç"²æμ确诊ç-...ä¾<å·²ç'1001

这似乎与c#中字符串的处理方式有关,因为中文可以在经典的asp中正确检索和显示

还有什么我需要做的就是将数据从数据库中取出,转换成字符串并在aspx页面上正确输出吗?

yin*_*uge 6

到目前为止,信息是:

  1. 您正在使用直接SQL INSERT脚本插入数据库.
  2. 数据在数据库中显示为已损坏.

问题可能出在两个地方:

  1. 在INSERT语句中,您是否在插入值前加上N?

    INSERT INTO #tmp VALUES(N'全澳甲流确诊病例已破100')

  2. 如果使用N作为前缀,String对象是否保存正确的数据?

    String sql ="INSERT INTO #tmp VALUES(N'"+ value +"')"

这里我假设value是一个String对象.

这个String对象是否包含正确的中文字符?

尝试打印出它的值并查看.

更新:

我们假设INSERT查询的构造如下:

String sql = "INSERT INTO #tmp VALUES (N' " + value + "')"
Run Code Online (Sandbox Code Playgroud)

我认为价值是汉字.

您是否直接将中文字符赋值?喜欢

String value = "??????????100";
Run Code Online (Sandbox Code Playgroud)

上述代码应该有效.但是,如果您进行了任何中间处理,则会导致问题.

我之前做了一个本地化的TC项目; 以前的架构师已经完成了ASP中必需的几个编码转换; 但它们会在.NET中产生问题:

  String value = "??????????100";
  Encoding tc = Encoding.GetEncoding("BIG5");
  byte[] bytes = tc.GetBytes(value);
  value = Encoding.Unicode.GetString(bytes);
Run Code Online (Sandbox Code Playgroud)

上述转换是不必要的.在.NET中,只需直接赋值即可:

  String value = "??????????100";
Run Code Online (Sandbox Code Playgroud)

这是因为String常量和String对象本身是Unicode兼容的.

框架库,例如File IO,当读取未以Unicode编码的文件时,它们会将外部编码转换为Unicode; 换句话说,框架将为您完成这项肮脏的工作.您大多数时间不需要执行手动编码转换.

更新:了解ASP用于将数据插入SQL服务器.

我已经编写了一小段ASP来将一些中文字符插入到SQL数据库中,它可以工作.

我有一个名为"trans"的数据库,我在里面创建了一个表"temp".ASP页面以UTF-8编码.

<html>
<head title="Untitled">
<meta http-equiv="content-type" content="text/html";charset="utf-8">
</head>
<body>
<script language="vbscript" runat="server">

If Request.Form("Button1") = "Submit" Then

    SqlQuery = "INSERT INTO trans..temp VALUES (N'" + Request.Form("Text1") + "')"

    Set cn = Server.CreateObject("ADODB.Connection")
    cn.Provider = "sqloledb"
    cn.Properties("Data Source").Value = *********
    cn.Properties("Initial Catalog").Value = "TRANS"
    cn.Properties("User ID").Value = "sa"
    cn.Properties("Password").Value = **********
    cn.Properties("Persist Security Info").Value = False

    cn.Open
    cn.Execute(SqlQuery)
    cn.Close

    Set cn = Nothing

    Response.Write SqlQuery
End If

</script>
<form name="form1" method="post" action="input.asp">
    <input name="Text1" type="text" />
    <input name="Button1" value="Submit" type="submit" />
</form>        
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

该表在我的数据库中定义如下:

 create table temp (data NVARCHAR(100))
Run Code Online (Sandbox Code Playgroud)

多次提交ASP页面,我的表格包含正确的中文数据:

select * from trans..temp

data
----------------
test
??
??????????100
Run Code Online (Sandbox Code Playgroud)

希望这可以提供帮助.