乱码的简单认识和解决

1 用什么编码保存文件 就用什么编码打开文件 比如  .txt 用utf-8 保存 就用 utf-8 打开 文件头上记录着编码方式
2 java 程序主方法 的文件是什么编码 ,程序运行 默认就是什么编码 比如 mian方法所在用 ut-f 保存 程序启动 默认编码就是utf-8  用System.out.println(System.getProperty("file.encoding")); 测试
3 乱码来源一般来源于程序之外 比如 数据库 浏览器 外部文件(IO)等,乱码的原因 编码不一致

 1 package com.test;
 2 import java.io.UnsupportedEncodingException;
 3 import java.net.URLDecoder;
 4 import java.net.URLEncoder;
 5 public class test {
 6     public static void main(String[] args) throws UnsupportedEncodingException {
 7
 8         // 程序编码方式 和 mian所在的类的文件编码方式一致
 9         System.out.println("程序默认编码方式:" + System.getProperty("file.encoding"));
10
11         // page
12         String value = "孔";
13         String value_encode = URLEncoder.encode(value, "utf-8"); // 浏览器把中文变成
14                                                                     // utf-8形式传输
15                                                                     // 可以查
16                                                                     // utf-8对应表
17         System.out.println("output:" + value_encode); // output:%E5%AD%94
18
19         // tomcat
20         String v = URLDecoder.decode(value_encode, "ISO-8859-1"); // tomcat 按
21                                                                     // ISO-8859-1
22                                                                     // 解码 就出错了
23         System.out.println("tomcat:" + v); // ???
24
25         // web servlet 中
26         String s = URLEncoder.encode(v, "ISO-8859-1"); // 那么就反过来把结果用 ISO-8859-1
27                                                         // 编码
28         String jieguo = URLDecoder.decode(s, "utf-8"); // 编码后得结果就变回了
29                                                         // %E5%AD%94(UTF-8)形式
30                                                         // ,在按 utf-8编码解码
31                                                         // 这个过程中并没有转成二进制补码形式
32         System.out.println(jieguo);
33
34         // ------------------------------------
35         System.out.println("------------------------------------");
36         byte[] s1 = v.getBytes("ISO-8859-1");// [-27, -83, -108]
37                                                 // //这个时候乱码是ISO-8859-1编码,按ISO-8859-1转成二进制补码形式
38                                                 // 和 用"孔"按"UTF-8"转是一样得,
39         // 孔的utf-8编码形式%E5%AD%94 ,存储在计算机里二进制(补码)如--> [-27, -83, -108]
40         byte[] s2 = "孔".getBytes("UTF-8"); // [-27, -83, -108]
41         System.out.println(new String(s1, "UTF-8"));
42         System.out.println("------------------------------------");
43         /*
44          * 字符 找到 utf-8得形式 二进制(补码) ”孔“ ->%E5%AD%94 --> [-27, -83, -108]
45          *
46          * ”孔“ -> "utf-8" -> %E5%AD%94 -解码-> "ISO-8859-1" --> 乱码 -->
47          * 按ISO-8859-1编码方式 拿到ISO-8859-1编码的二进制(补码)-->和”孔“ ->
48          * "utf-8"编码的二进制(补码)是一样的 拿到ISO-8859-1编码的二进制(补码) 后按"utf-8"编码转成中文字符
49          */
50         // =======================================================
51
52         String abc = "abc中国";
53         byte[] bytes = abc.getBytes();
54         for (byte b : bytes) {
55             System.out.print(b + "  ");
56         }
57         System.out.println();
58         String newabc = new String(abc);
59         System.out.println(newabc);
60         // Java文件编码为UTF-8:
61         // 打印结果:
62         // 97 98 99 -28 -72 -83 -27 -101 -67
63         // abc中国
64
65         // Java文件编码为GBK:
66         // 打印结果:
67         // / 97 98 99 -42 -48 -71 -6
68         // abc中国
69         // 注:java文件的编码可以通过选择java文件右键Properties——》Text file encoding 中进行设置
70     }
71 }

时间: 2024-10-08 10:34:11

乱码的简单认识和解决的相关文章

ASP.NET开发在JavaScript有中文汉字时出现乱码时简单有效的解决

一般情况在使用ASP.NET开发使用JavaScript有中文汉字时不会出现乱码情况,比如:alert('您看到我了吗?');这样直接输入中文汉字的代码中是不会出现乱码的,如果出现了,一是检查Web.config文件确保统一编码形式:二是设置页面的编码,如:charset=utf-8等措施,可在网上查询相关解决方案,这不是本随笔要阐述的问题.      本随笔主要讨论,有些时候用JavaScript调用了后台代码中传入的中文汉字会出现乱码,比如访问了Cookie中含有中文汉字的情况.我这里使用的

php -- 解决php连接sqlserver2005中文乱码问题(附详细解决方法)

@[email protected]~~ --php5.2 --phpstudy --apache --sqlserver2005 @[email protected]~~问题描述 问题一:php连接sqlsever2005,输入中文,然后查询sqlserver中对应的数据,由于提交中文是UTF-8,而sqlserver的中文为GBK,所以字段无法匹配,没有查询结果. 问题二,php连接sqlsever2005,读取数据表数据,由于中文是UTF-8,而sqlserver的中文为GBK,读出来的中

JS文件中的中文在网页引用时显示乱码的简单解决方式

今天把一个jquery方法从前台cshtml文件转移到单独的js文件中后执行不成功,调试发现if判断中的中文字符串变成了乱码,之前在前台文件中是可以正常显示的,所以判定可能是跟文件的编码方式有关系. 搜索网络得知在引用时指定编码方式charset即可解决,此方法已验证: <script type="text/javascript" language="javascript" src="scripts/xxx.js" charset=&quo

利用Filter技术解决中文乱码的简单实现

web.xml的配置 <filter> <filter-name>FilterTest01</filter-name> <filter-class>com.baowei.fiiter.FilterTest01</filter-class> <init-param> <param-name>charset</param-name> <param-value>utf-8</param-value&

ASP.Net MVC——DotNetZip简单使用,解决文件压缩问题。

准备工作: 在vs工具栏中找到NuGet 下载DotNetZip 现在就可以使用DotNetZip强大的类库了,在这里我给出一些简单的使用. public ActionResult Export() { using (ZipFile zip = new ZipFile(System.Text.Encoding.Default)) { zip.AddFile(Server.MapPath("~/Img/2.png"), "Images"); zip.AddFile(S

再次遇到golang乱码问题,用simplifiedchinese解决

上篇文章中,抓取网页时,本想匹配其中的汉字.由于出现乱码,只好匹配英文绕过了问题. 原因很简单:该网页没指定utf8,默认应该是GBK 解决办法也很简单:引入 "golang.org/x/text/encoding/simplifiedchinese" 比如原来的代码是 resp, err := this.cleint.Get(url) body, err := ioutil.ReadAll(resp.Body) 此时body中读取到的是乱码. 只需增加一个reader resp, e

简单设置,解决使用webpack前后端跨域发送cookie的问题

最近用vue来做项目,用webpack来做前端自动化构建.webpack-dev-server会在本地搭建一个服务器,在和后端调试的时候,就会涉及到跨域的问题. 刚开始时,没有用vue-cli来构建项目,而是参考了github上的vue-vueRouter-webpack来构建.看网上的资料,vue-cli可以通过配置代理来解决跨域的问题: proxyTable: { '/list': { target: 'http://api.xxxxxxxx.com', changeOrigin: true

Tomcat中文乱码问题的原理和解决方法

自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享. 一.Java中文问题的由来 Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦.原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题. 首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java

安装redhat时中文显示乱码(小方框)解决方法

在安装linux的时候,安装完了中文出现乱码或者是当时选错了选成了英文的,到时候中文显示乱码,下面说一下问题的解决: 在首次安装RHEL5时,如果选择的是英文,那么系统将不安装中文支持包,这样就导致了中文显示为乱码(小方框)....... 有很多人说vi /etc/sysconfig/i18n文件,其实根本就没有那个必要. 解决方法: 安装 1.fonts-chinese-3.02-9.6.el5.noarch.rpm.  如果无法安装,则加个--force 2.fonts-ISO8859-2-