弘帝企业智能建站系统交流平台

 找回密码
 立即注册
查看: 1569|回复: 1

理解并解决GBK转UTF-8奇数中文乱码

[复制链接]
发表于 2021-3-26 08:31:54 | 显示全部楼层 |阅读模式
先阅读:彻底搞懂字符编码
http://wh.ac.cn/forum.php?mod=viewthread&tid=2918&fromuid=1

GBK编码是一个中文2个字节,而UTF-8编码是一个中文3个字节,当我们调用getBytes("UTF-8")方法时,会通过计算来增加字节,使得从GBK的2个字节变成UTF-8对应的3个字节。因此,上例3个中文输出了9个字节。

解决办法:保证字节正确才是硬道理。当调用getBytes("UTF-8")转换成字节数组后,创建ISO-8859-1编码的字符串,ISO-8859-1编码是一个字节对应一个字符,因此不会使最后一个字节错误。
案例一:Hondy.Site.API.Default.Index
if (Session.CodePage==936)
{
    byte[] bytes = Encoding.UTF8.GetBytes(ret);
    ret = Encoding.GetEncoding("GBK").GetString(bytes);
}


案例二:Hondy.Site.API.Login.Section调用Hondy.Site.API.Login.Menu.Options
System.Web.HttpContext.Current.Session.CodePage = CodePage;解决select.option奇数最后一个汉字显示?的问题


回复

使用道具 举报

 楼主| 发表于 2023-3-26 18:01:29 | 显示全部楼层
GBK编码网站,用AJAX向ASP传递中文参数
1、在客户端使用 encodeURIComponent 方法对中文参数进行编码,保证其采用 UTF-8 编码传输。
2、然后在ASP中使用ClassCoding.UrlDecode_JS来转换成中文录入数据库
示例:
JS:hondycms-->login->js->function.js
function getFormData($form) {
        var unindexed_array = $form.serializeArray();
        var indexed_array = {};

        $.map(unindexed_array, function (n, i) {
                indexed_array[n['name']] = encodeURIComponent(n['value']);
        });
        return indexed_array;
}
hondycms-->login->js->contact.js
$("body").on("click", "[type=submit]", function (e) {
    e.preventDefault();
    editor.sync();
    $(this).find("[name=content]").val(editor.html().replaceAll("../UploadFiles/", "UploadFiles/"));
    $.ajax({
        type: 'POST',
        data: JSON.parse(JSON.stringify($.extend({
            navid: navid,
            ajax: 1
        }, getFormData($("form"))))),
        dataType: 'json',
        success: function (data) {
            if (data.stat === 'ok') {
                alert(common.ok);
            } else {
                err(data.msg);
            }
        }
    });
})
ASP:
HCMS->Contact->Update
Content = RequestForm("Content")
Set ClassCoding = New Coding
Content = ClassCoding.UrlDecode_JS(Content)
Set ClassCoding = Nothing



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|弘帝企业智能建站系统 ( 皖ICP备07503252号 )

GMT+8, 2024-4-20 14:01 , Processed in 0.064024 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表