Servlet向客户端发送中文数据的编码情况
(更多内容请关注本人微信订阅号:it_pupil)

本文讲述服务端servlet向客户端浏览器发送中文数据的编码情况,需要抓住下面几点:
输出流发送数据,必须是以字节形式传输的。也就是说,如果你在服务端定义一个字符串,那么servlet要先编码成字节数组,再发送到客户端。
客户端浏览器在收到字节码数据时,需要将其解码成字符串显示出来。
在服务端,如果你使用的是字节流,那么只需要注意两点:
拿到字符串,以特定形式编码成字节数组(如UTF-8)。(字节数组是你人工转换的)
告诉浏览器,以相同方式解码显示(UTF-8)。
如果你使用的是字符流,那么需要注意三点:
字符流其实就是你传给它的是字符,它自己内部还是会转换成字节的。
拿到字符串,告诉服务端,发送时以特定方式编码成字节数组(如UTF-8)。(字节数组是字符流内部转换的)
告诉浏览器,以相同方式解码显示(UTF-8)。
就上面提出的几点,有三种实现方案保证不乱码(也是乱码的解决思路):
方案一,字节流:
方案二,字符流:
方案三,还是字符流:
方案三其实可以像下面模拟一下编解码的过程(toHex方法是把字节数组以16进制形式输出):
所以,方案三的关键之处在于,一开始用UTF-8编码,最后用UTF-8解码,这是本质。
虽然ISO-8859-1是单字节编码,但是,一开始用UTF-8编码后,你用ISO-8859-1解码,它会一个字节一个字节去解开,而UTF-8表示的汉字,一个汉字是三个字节,当然会乱码。
但是乱码不要紧啊,这个乱码只是个中间过程,不需要显示出来。紧接着用ISO-8859-1再编码,那么,编码出的字节是跟UTF-8编码的字节是相同的。
如此,最后再用UTF-8去解码,完美!
本文是关于编码分析的第5篇,原文地址:
http://mp.weixin.qq.com/s?__biz=MzIyNzUzNjQ3MA==&tempkey=37C%2F%2BA4Bi9W%2F7a0wo%2B56WiBFhphFwjbCfb6TgA3OcQ4v4JbKjTBmxOQLMoZldKoCJeAi%2BhxmRuBUwSzp7yjZCA2k5X%2BXxzpE3hD%2BaLWechfiCfr797hJOnJt29Rqr9eM5KF3ZKZOmQ%2FeJGYzG8vXRQ%3D%3D&#rd
更多内容请关注相关订阅号查看。
Servlet向客户端发送中文数据的编码情况的更多相关文章
- response小结(一)——用response向客户端输出中文数据(乱码问题分析)
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象.request和response对象既然代表请求和响应,那我们要 ...
- SpringMVC客户端发送json数据时报400错误
当测试客户端发送json数据给服务器时,找不到响应路径? 原来是参数类型不符,即使是json也要考虑参数的个数和类型 解决:将age请求参数由"udf"改为"3" ...
- socket小程序写一个客户端,实现给服务端发送hello World字符串,将客户端发送的数据变成大写后返回
写一个客户端,实现给服务端发送hello World字符串,将客户端发送的数据变成大写后返回 本机id是192.168.xx.xy 服务端 import socket soc = socket.soc ...
- udp回显客户端发送的数据
这里让客户端给服务端发送的数据被服务端自动发回来 客户端: import socket client_socket = socket.socket(socket.AF_INET, socket.SOC ...
- tcp回显客户端发送的数据
客户端: import socket tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_socket.connect ...
- (九)springmvc之json的数据请求(客户端发送json数据到服务端)
index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...
- 使用SQLSERVER 2008 R2 配置邮件客户端发送DB数据流程要领
设置邮件 QQ邮箱貌似不太行,建议用企业邮箱或者其他邮箱作为发件箱 新建一个邮件发件箱账号,具体邮件服务器按照各自邮件配置,是否使用ssl,自便 下一步,下一步,配置成功 use msdb Go DE ...
- Python3学习之路~8.2 socket简单实例 实现ssh 发送大量数据
实例1: 利用socket模拟客户端和服务器端各自收发一次数据: #Author:Zheng Na # 客户端 import socket # 声明socket类型,同时生成socket连接对象 cl ...
- 【Java框架型项目从入门到装逼】第五节 - 在Servlet中接收和返回数据
在上一节的程序中,我们可以看到HttpServletRequest, HttpServletResponse这两个对象.可以说,这是JavaWeb中至关重要的两个对象.接下来,我们来做一个简短的说明: ...
随机推荐
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】
[python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...
- web storage和cookie的区别
Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的.Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外co ...
- 比CMD更强大的命令行WMIC
先决条件:a. 启动Windows Management Instrumentation服务,开放TCP135端口.b. 本地安全策略的“网络访问: 本地帐户的共享和安全模式”应设为“经典-本地用户以 ...
- ZACC_DOCUMENT
method if_ex_acc_document~change. data: wa_extension type bapiparex, ext_value() type c, wa_accit ty ...
- qq客服代码
http://shang.qq.com/v3/widget.html <a target="_blank" href="http://wpa.qq.com/msgr ...
- php fastcgi_finish_request让你的程序由等待时间,瞬间完成,提高用户体验
当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法.按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行 ...
- 安装 node-sass 的正确姿势
SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install node-sass
- FastReport4.6 组件安装
要完整版不是官方版的试用版.下面包括有的文件 安装前请册除原有的FR控件. 1. "Tools|Environmet options..."中的"Library" ...
- Python 的 pyinotify 模块 监控文件夹和文件的变动
官方参考: https://github.com/seb-m/pyinotify/wiki/Events-types https://github.com/seb-m/pyinotify/wiki/I ...
- Java如何解决脆弱基类(基类被冻结)问题
概述 大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系).实际上80%的代码应该完全用interfaces写,而不是通过extends.“JAVA设计模式”一书详细阐述了怎样用 ...