如何使用ASP classic在数据库中读写utf-8字符?

时间:2011-09-08 07:51:13

标签: utf-8 character-encoding asp-classic iis-6 ansi

我正面临插入问题&在我的数据库中获取UTF-8字符。插入正确,但显示时不显示UTF-8字符。以下是我的代码。你能告诉我哪里出错了吗?

档案:utf8_test.html

        <html><head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <title>UTF8</title>
    </head>
    <body><DIV align=center>
        <form action="utf8_insert.asp" method="post"><table>
            <tr><td>UTF-8:</td><td><input type="text" name="utf8" id="utf8"/></td></tr>
            <tr><td align="center" colspan="2"><input type="submit" value="submit"></input></td></tr>         
        </table></form>
    </DIV></body></html>

文件:utf8_insert.asp

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    <% option explicit
    dim objConn, objRS , strSql, input, test
    Response.CodePage = 65001 
    Response.CharSet = "utf-8" %>
    <html>
    <head><title>Test UTF </title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <head/>
    <body>
    <h1>Test UTF </h1>
    <%
        'File saved in ANSI - also works in UTF-8
        input = Request.Form("utf8")
        test = "多语言测试 test"
        response.write "Test: " + test + "</br></br>"
        session("norm_dsn") ="dsn=norm_dsn;driver=SQL Server;uid=username;pwd=password"
        set objConn=server.CreateObject("ADODB.Connection")
        objConn.Open session("norm_dsn")
        strSql = "INSERT INTO test_utf8 (text, date_log) VALUES ('" + input +"', sysdate)"
        objConn.execute(strSql)
        set  objRS = Server.CreateObject("ADODB.RECORDSET")
        strSql="select * from test_utf8 order by date_log"
        set objRS=objConn.execute(strSql)
        while NOT objRS.EOF
            response.write objRS("text") & "</br>"
            objRS.MoveNext 
        wend
        objRS.close
        set objRS = nothing 
        objConn.Close
        set objConn=nothing
    %>
    </body></html>

1 个答案:

答案 0 :(得分:3)

我不知道你使用的是哪个SQL服务器,但如果你使用的是MS SQL服务器,你应该在unicode字符串之前有一个前缀。 N'myString'

前缀表示后续字符串是Unicode。如果不使用N作为Unicode字符串常量的前缀,SQL Server将在使用该字符串之前将其转换为当前数据库的非Unicode代码页。

http://support.microsoft.com/kb/239530

示例:

insert into myTable (columnName) values(N'My unicode string goes here')

ASP文件的编码也会影响字符串的处理方式。 尝试将.ASP文件保存为磁盘上的utf-8。

另外:请参阅此主题:internal string encoding