整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

记事本编写的HTML乱码,如何解决?

天第一次看HTML5的书籍,尝试使用记事本编写第一个网页,不料,打开网页后,竟然是乱码状态,愁煞吾也,这个问题怎么破呢?经查相关资料,是因为记事本默认存储的编码格式与html中的编码格式不一致导致的.....

情况具体是这样的:

第一步是将写好的内容的记事本的后缀“TXT”改成了HTML

打开网页之后是这样的:乱码


查阅资料后,解决方法是这样的:

在网页空白处点击右键,找到编码点击,选择UTF-8,问题就解决了。



还有一种方法就是,使用记事本另存为修改后缀名为HTML,编码处选择UTF-8,就不会出现乱码现象了。

融界2024年1月16日消息,据国家知识产权局公告,中信银行股份有限公司申请一项名为“一种基于iText的支持生僻字转换方法及系统”的专利,公开号CN117408230A,申请日期为2023年10月。

专利摘要显示,本发明提供了一种基于iText的支持生僻字转换方法及系统,涉及人工智能技术领域。其中,所述方法包括:获得生僻字字库;获得常规字字库;将所述生僻字字库与所述常规字字库进行组合,获得字库集合;根据所述字库集合对HTML进行字体样式设定,获得HTML信息;将所述字库集合设置到iText中,调用所述iText对所述HTML信息进行PDF转换,获得转换文件。解决了现有技术中存在遇到生成含有生僻字的HTML转换PDF场景时,无法正常完成生僻字转换,出现生僻字变为乱码,且使用升级现有中文字字库的方法不能随时新增生僻字,灵活性差的技术问题。

本文源自金融界

景说明

假设需要劫持http响应并在html页面中注入一段js代码后再传回浏览器,实现在浏览器出现一个弹框消息提醒。

由于原始html页面编码格式存在UTF-8、GBK等多种编码格式,如果注入的js包含中文消息的话,那么在UTF-8或GBK编码的页面就会有一个出现乱码。有没有办法做到不管是针对GBK、UTF-8编码的页面都能做到正常显示而不会出现乱码哪?

产生乱码的原因

首先来分析一下产生乱码的原因,我们在浏览器看到的信息都是通过图形学手段在显示器上呈现出来的,而实际保存在计算机硬件上的都是0和1(因为计算机实现是基于二进制),那么计算机要显示、传递信息就需要依靠一套规则把一串串的0和1识别为正确的字符,这就是编码。

例如01000001在ASCII编码规则下对应字母A。相同的0/1串,不同的编码解析出的字符一般是不同的,因此如果html页面按照UTF-8的编码解析正常,那么按照GBK的编码解析就会是乱码了。根据上面的示意图,假设注入的js代码为utf-8编码格式,而原始html编码格式也为UTF-8编码格式,那么最终注入这部分中的中文就能正常显示,但是如果原始html为GBK编码,那注入的这部分js代码的中文就会显示乱码。

解决办法

有一种unicode统一编码字符集,目标是把所有文字、字符统一编码,也就是一串0/1组合在unicode字符集下对应的字符是唯一的,不会存在歧义。而js是支持解析unicode字符的,那么就可以在注入js中把要显示的消息统一转换为unicode编码,浏览器端去解析这个unicode编码,这样不管原始html是UTF-8还是GBK,都能正常显示中文。

原始注入js代码关于中文字符的部分

// utf-8编码格式
let message = "中文";

解决乱码的注入js代码关于中文字符的部分

// utf-8编码格式
let message = "\\u4e2d\\u6587";  // 这个编码对应上面的message"中文"

注意:

  1. 注入的js代码仍然是utf-8编码格式,只是消息内容转换为unicode编码的形式;
  2. unicode中0x4e2d表示的0/1串对应汉字"中",0x6587对应的0/1串对应汉字"文";
  3. message其实也不是真正的unicode编码,它只是普通的字符串,只是使用了unicode对应的码点(也就是二进制对应的数值),因为可以利用这个码点在浏览器中恢复出正确的字符,事实上unicode字符集并没有规定具体的编码格式。