Web技术----中文编码

本文探讨了计算机中中文编码的原理,涉及Java中编码的常见场景,如IO操作和内存处理。强调了ISO-8859-1编码可能造成中文字符丢失,而GBK和UTF-16之间的区别。UTF-16因其高效但占用空间大,适合内存操作;UTF-8则因在网络传输中的容错性更适合网络通信。在HTTP请求处理中,正确设置请求和响应的字符编码至关重要,以避免编码问题。
摘要由CSDN通过智能技术生成

计算机中存储的最小单元为1个字节,即8个bit(2的8次方),所以能表示的字符范围为0-255

  • java中需要编码场景
  1. io中存在编码(若不指定编码则使用系统默认编码,跨环境使用时会出问题
 string file = “c/test.txt”;
        string charset = “utf-8”;
        //写字符转换为字节流
         FileOutputStream outputStream = new FileOutputStream(file);
         OutputStreamWrite writer = new OutputStreamWriter(outputStream,charset);
            try{
                writer.write(“****************”);
        } finally{
            write.close;
        }
                //读字节转化为字符
        FileInputStream inputStream = new FileInputStream(file);
        InputStreamReader reader = new InputStreamReader(inputStream,charset);
        StringBuffer buffer = new StringBuffer();
        Char buf = new Char(64);
        int count = 0;
        try{
             while((count=reader.read(buf)!=-1){
                   buffer.append(buffer,0,count);
             }
           }finally{
               reader.close();
        }

2.内存中操作的编码

  String s=“***********”;
  byte[] b = s.getBytes(“UTF-8”);
  String n = new String(b,”UTF-8”);

中文字符经过iso-8859-1编码会丢失成?,gb2312只支持6700个汉字,不是所有汉字都能用gb2312。gbk编码规则跟gb2312一样,只是支持汉字更多,gb2312能编译的汉字gbk同样支持,反之不然。utf-16特点是效率非常高,但是规则简单浪费存储空间。utf-8效率比gb2312,gbk高。

使用场景:utf-16效率非常高,从字符到字节的相互转换较简单,适合在本地磁盘和内存间使用,可进行字符和字节间的快速切换(如java内存编码就采用utf-16),但是不适合网络传输,因为网络传输容易损坏字节,一旦字节流损坏很难恢复

                utf-8更适合网络传输,单个字符损坏不会影响后面字符,utf-8在编码效率及安全性上做了平衡,是理想的中文编码方式

  • 对http请求过来的body参数的解码是在第一次调用request.getParamter时,request.getParamter被调用时会调用request.parseParamter进行解码,parseParamter会根据contenttype定义的charset进行解码(若未定义,则使用默认的iso-885),一定要在第一次调用request.getParamter之前就设置request.setCharacterEncoding(charset)
  • 返回是通过response.setCharacterEncoding来设置,并且通过header的content-type返回给客户端,浏览器根据content-type的charset进行解码
  • 访问数据库设置编码,如mysql: url="jdbc:mysql://localhost:3306/DB?userUnicode=true&characterEncoding=GBK"
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值