Как читать и писать символы utf-8 в базе данных, используя ASP classic? - PullRequest
1 голос
/ 08 сентября 2011

У меня проблема с вставкой и извлечением символов 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 Ответ

3 голосов
/ 08 сентября 2011

Я не знаю, какой SQL-сервер вы используете, но если вы используете сервер MS SQL, у вас должен быть префикс перед строками Unicode.N'myString'.

Префикс обозначает, что следующая строка находится в Юникоде.Если префикс строки Unicode не префикс N, SQL Server преобразует его в кодовую страницу, отличную от Unicode, в текущей базе данных, прежде чем использовать эту строку.:

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

Также кодировка ASP-файла может влиять на то, как обрабатываются строки.Попробуйте сохранить .ASP-файл как utf-8 на диске.

Также: см. Эту ветку: кодировка внутренней строки

...