处理中文乱码和中文部分乱码

文章转自:http://book.51cto.com/art/201112/306309.htm

在网络操作中,关于中文乱码很多初学者都感到非常困难,如何解决乱码?不要没有目的胡乱转码,笔者访问了几个初学者,他们对于这个问题常用的方法就是一个一个编码去试直到找到为止,但有些情况即使一个一个地去试也不能解决问题。在网络标准接口内容中已经简单解释了一部分,下面用几个例子,对网络操作中的几个典型中文乱码进行讲解。

1.第一种情况

服务器和客户端编码不统一造成中文乱码,当服务器返回数据是UTF-8格式时,客户端在读取输入流时,需要将其转换成UTF-8格式,请看客户端部分代码:

………………..省略部分代码………………  
// 设置URL并且打开连接  
url = new URL("http://192.168.1.7:8080/exa/zh_cn");  
httpurlconnection = (HttpURLConnection) url.openConnection();  
//得到输入流并转换为字符串  
inputStream = httpurlconnection.getInputStream();  
String strResult="";  
byte[] b = new byte[1024];  
int i = 0;  
while ((i = inputStream.read(b)) != -1) {  strResult+=new String(b,"utf-8");  b = new byte[1024];  
}   
//显示到控件上  
textView_1.setText(strResult);  
………………省略部分代码………………  

代码中关键代码是,new String(b,"utf-8"),将byte数组转换成UTF-8格式的字符串,结果如图10-17所示。

当改成new String(b,"gb2312")时得到结果如图10-18所示。


如何避免中文乱码问题,首先,不要频繁转码和漫无目的转码,这样转来转去最后自己也不知道转到哪里去了,其次,尽量使客户端程序的编码和服务器编码统一,再次避免用字节的方式去读取中文和操作中文字符串,因为一个汉字占两个字节,稍不注意开发过程中就会出现读取一个字节,造成读取了半个字,就会出现乱码。

2.第二种情况

中文汉字中出现少部分中文乱码。这种现象看起来很怪异,往往在开发过程中,读者都有可能这样操作了,但没有发现。这种现象是怎么造成的呢?先看例子程序。

实例:

读取文件的核心代码如下(为了测试多一些的汉字,本例将把很多汉字写在test.txt里放在assets文件夹下):

………………..省略部分代码………………  
inputStream = this.getAssets().open("test.txt");  
byte buffer[] = new byte[100];  
StringBuffer sb = new StringBuffer();  
int i = 0;  
while ((i = inputStream.read(buffer)) != -1) {  sb.append(new String(buffer, 0, i));  
}  
textView_1.setText(sb.toString());  
………………..省略部分代码……………… 

由上述代码产生的效果如图10-19所示。

部分乱码的现象出现了,原因我先不讲,先改动代码再看看效果。把byte buffer[] = new byte[100]改成byte buffer[] = new byte[inputStream.available()],运行后得到的效果如图10-20所示。

思考一下:100和inputStream.available()的区别,就会出现中文部分乱码的问题?原因是有可能在读取100个字节的时候正好遇到一个汉字的前半个字节,后100个字节的第一位置的字节也是这个字的后半个字节,半个字节是汉字吗?这样当然会出现乱码了。把字节的数组直接设置成输入流的长度,在读取的时候,一次性读取,那么就不会出现所谓的半个字的现象,当然也不会出现乱码的问题了。


还有一个解决办法,就是不以字节的方式读取文件,以字符的方式读取,一个字符装一个汉字是合法的,看一下代码

………………..省略部分代码………………  
inputStream = this.getAssets().open("test.txt");  
StringBuffer sb = new StringBuffer();  
InputStreamReader isr=new InputStreamReader(inputStream);  
char buf[] = new char[20];  
int nBufLen = isr.read(buf);  
while(nBufLen!=-1){  sb.append(new String(buf, 0, nBufLen));  nBufLen = isr.read(buf);  
}  
textView_1.setText(sb.toString());  
………………..省略部分代码………………  

得到的结果当然是没有乱码的效果。读者在开发过程中遇到中文乱码问题,要认真分析和思考,总能解决问题的。






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14540.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP界面显示中文乱码

在写一个表单提交的项目中&#xff0c;遇到了PHP界面输出无法显示中文界面。 后来查阅相关资料&#xff0c;得出解决途径。 代码如下&#xff1a; <!DOCTYPE html> <html> <head> <title>123</title> </head> <body><?php he…

中文乱码问题

解决中文乱码问题&#xff0c;出现于解压后中文文件名&#xff0c;中文应用程序即exe 常见的中文乱码及解决一. zip压缩包解压之后中文文件名称乱码1. 系统区域改成中文简体2. 用winar打开的时候&#xff0c;选择名称加密&#xff1a;简体中文 二. 中文应用程序&#xff08;以.…

零代码编程:用ChatGPT爬取网页数据遇到乱码怎么办?

今天用ChatGPT写了一段代码&#xff0c;爬取中文网站数据&#xff0c;提示词如下&#xff1a; 写一段Python程序&#xff0c;爬取网页数据并保存到excel表格。 具体步骤&#xff1a; 打开网站https://www.zhenfund.com/Case/?id3&#xff0c;解析源代码&#xff1b; 定位 …

解决各种中文乱码问题

tomcat出现中文乱码问题有以下几种情况&#xff1a; 1.通过cmd启动tomcat出现中文乱码&#xff08;tomcat日志输出编码与cmd编码不一致&#xff09; cmd启动tomcat出现中文乱码 乱码原因&#xff1a;这是由于windows下的cmd的默认编码是GBK编码&#xff0c;Tomcat控制台默认输…

Python 乱码原理及其解决办法

最近在爬虫过程中爬下来的HTML文件中出现了不认识的字符&#xff0c;也就是“乱码”&#xff08;之前也遇到了系统之间文件显示“乱码”的问题&#xff09;&#xff0c;花了点时间学习Python编码相关的问题&#xff0c;主要参考了以下几位的文章&#xff1a;Unicode编码底层描述…

别研究 ChatGPT 了,来看个国产好项目

今天我要给大家推荐一个近期荣获 GVP 称号的项目—— Eoapi&#xff0c;界面简洁的同时满足我的核心诉求。&#xff08;项目作者是我的朋友&#xff0c;大家都支持一下~&#xff09; 简单介绍 Eoapi 是纯国产的开源项目&#xff0c;可以说是 Postman 的好兄弟&#xff0c;该有…

Android小项目——新闻APP

前言&#xff1a; 在公司学习了一段时间Android知识&#xff0c;决定做一个小项目&#xff0c;目的是学会运用所学的基础知识&#xff0c;在这里记录一下开发历程&#xff0c;大家可以把它看成一款入门级练手的 Demo 应用吧~ 项目概述&#xff1a; 类型&#xff1a; 新闻APP&am…

【编程架构实践】关于技术栈和架构

目录 技术栈和架构 技术栈 1. 项目需求 2. 开发团队技能

提示工程七巧板:让ChatGPT发挥出最佳性能

机器有机器的作用&#xff0c;人有人的独特个性和价值。正因为如此&#xff0c;一方面&#xff0c;ChatGPT 等人工智能语言模型需要通过不断与人类的公共知识信息数据交互、汇聚&#xff0c;不断与人类进行对话&#xff0c;才能拥有越来越好的智能表现&#xff1b;另一方面&…

搭建DVWA渗透测试靶场

目录 一、虚拟机的介绍及安装 二、Windows镜像操作系统安装 三、Windows虚拟机的相关配置 四、DVWA靶场搭建 一、虚拟机的介绍及安装 1、双击运行安装文件&#xff0c;然后一直点下一步 2、我接受 3、勾选增强型&#xff0c;然后继续下一步 4、去掉更新及加入体验计划&a…

用 ChatGPT 实现综艺节目中的“你说我猜”游戏|征稿活动V6

引言&#xff1a;本文为 Cocos 第 6 期社区征稿活动参赛文章&#xff0c;作者「花叔爱折腾」。他用ChatGPT Cocos Creator 做了款 AI 对话的小游戏&#xff0c;以下为开发实录。 前言 在实现这个游戏前&#xff0c;我在思考&#xff0c;GPT 实现的是 AI 对话&#xff0c;我总在…

基于深度强化学习训练《街头霸王·二:冠军特别版》通关关底 BOSS -智能 AI 代理项目上手

文章目录 SFighterAI项目简介实现软件环境项目文件结构 运行指南环境配置验证及调整gym环境&#xff1a; gym-retro 游戏文件夹错误提示及解决Could not initialize NNPACK!错误提示&#xff1a;libGL error: MESA-LOADER: failed to open swrast 运行测试训练模型查看曲线 Tip…

WebGoat8.2.2通关记录一(General、Injection)

安装与部署 # 安装 docker pull webgoat/goatandwolf # 启动 sudo docker run -d -p 6870:8888 -p 6869:8080 -p 6871:9090 webgoat/goatandwolf我下载webgoat版本经常无法自动启动webwolf&#xff0c;需要进入到容器命令函手动启动 docker exec -it -uroot fervent_carson b…

通关pikaqu靶场sql注入数字型(一)

目录 1.数字型注入 2.实战(通过pikachu平台) 3.sql代码原理 1.数字型注入 原理以及步骤和实战 SQL数字型注入是指攻击者通过在SQL语句中注入恶意数字型参数&#xff0c;从而利用程序漏洞获得对数据库的未经授权访问。 实现SQL数字型注入的过程通常包括以下几个步骤&#xff1…

【编程新时代】AI+编程,ChatGPT轻松完成MySql建表CURD操作!

1、向ChatGPT发送指令 你能帮我根据我提供的内容生成mysql建表语句吗&#xff1f;表注释: 学生基础字段:id,guid(varchar255),create_time,create_user_guid,update_time,update_user_guid,delete_time,delete_user_guid业务字段: 名称,性别,年龄要求:1. 表名称根据表注释翻译为…

你不问它不说:ChatGPT 创建的大部分代码都不安全

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;代码卫士 ChatGPT 是OpenAI 公司用于聊天机器人的大型语言模型&#xff0c;它生成的代码大部分都是不安全的&#xff0c;而且它虽然能够指出其缺点却无法提醒用户注意代码的不当之处。 就在学术界如…

ChatGPT需要怎样的芯片?

最近&#xff0c;以ChatGPT为首的生成类模型已经成为了人工智能的新热点&#xff0c;硅谷的微软、谷歌等都纷纷大举投资此类技术&#xff08;微软100亿美元入股ChatGPT背后的OpenAI&#xff0c;谷歌也于近日发布了自研的BARD模型&#xff09;&#xff0c;而在中国以百度等为代表…

芯片是如何为ChatGPT提供算力的?怪不得地球都容不下它了

关注公众号&#xff0c;发现CV技术之美 近日&#xff0c;ChatGPT因大规模封号及关闭Plus付费会员的申请引发大家热议。 有网友说这是因为计算资源不够了&#xff0c;已经不单是靠钱能解决得了的问题&#xff0c;地球上已经没有足够的算力来满足ChatGPT的运行需求了。 AI的发展真…

ChatGPT发展报告:原理、技术架构详解和产业未来(附下载)

今年12月1日&#xff0c;OpenAI推出人工智能聊天原型ChatGPT&#xff0c;再次赚足眼球&#xff0c;为AI界引发了类似AIGC让艺术家失业的大讨论。 据报道&#xff0c;ChatGPT在开放试用的短短几天&#xff0c;就吸引了超过 100 万互联网注册用户。并且社交网络流传出各种询问或…

【自然语言处理】【ChatGPT系列】FLAN:微调语言模型是Zero-Shot学习器

FLAN: 微调语言模型是Zero-Shot学习器 《Finetuned Language Models are Zero-shot Learners》 论文地址&#xff1a;https://arxiv.org/abs/2109.01652 相关博客 【自然语言处理】【大模型】BLOOM&#xff1a;一个176B参数且可开放获取的多语言模型 【自然语言处理】【大模型】…