Sea*_*ean 4 c# sql-server asp.net
我将中文和英文文本存储在SQL Server 2005数据库中并将其显示在网页上,但中文未正确显示.我一直在阅读有关该主题的内容,并做了以下工作:
当我将它们直接插入到页面中时,正确地在页面中显示中文字符,即不从数据库中获取它们
这些是应该显示的字符:全澳甲流确诊病例已破100
这是从数据库中检索文本时显示的内容:å...ææ¾³ç"²æμ确诊ç-...ä¾<å·²ç'1001
这似乎与c#中字符串的处理方式有关,因为中文可以在经典的asp中正确检索和显示
还有什么我需要做的就是将数据从数据库中取出,转换成字符串并在aspx页面上正确输出吗?
到目前为止,信息是:
问题可能出在两个地方:
在INSERT语句中,您是否在插入值前加上N?
INSERT INTO #tmp VALUES(N'全澳甲流确诊病例已破100')
如果使用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)
希望这可以提供帮助.