- 浏览: 504673 次
- 性别:
- 来自: 沈阳
-
文章分类
- 全部博客 (437)
- Windows设置 (2)
- oracle数据库 (39)
- bug--jsp (4)
- j2se (13)
- js (40)
- bug-tomcat不能启动程序 (1)
- Hibernate (29)
- eclipse (20)
- java (65)
- 设计模式 (6)
- bug (18)
- PL/SQL (11)
- 前台 (5)
- 杂谈 (25)
- UML (1)
- jdbc编程 (2)
- 技术调研 (1)
- 数据通信 (2)
- ios (1)
- servlet自学笔记 (10)
- tomcat (9)
- SQL学习笔记 (6)
- java工具 (1)
- 数据库设计 (4)
- javascript (10)
- jsp (11)
- struts (17)
- ajax (7)
- linix/Unix (6)
- 资源 (3)
- spring (14)
- 算法 (5)
- 计算机网络 (2)
- http (5)
- c++ (2)
- web应用 (3)
- jvm (5)
- java中的字符编码 (14)
- java代码库 (2)
- classloader (1)
- 读书笔记 (1)
- c (1)
- 开源软件 (1)
- svn (1)
- AOP (1)
- java序列化 (1)
- 多线程 (4)
- The legendary programmers (1)
- Apache http Server (1)
- html tag (3)
- struts1.X学习笔记 (5)
- buffalo (1)
- 自己收藏 (0)
- TOEFL(IBT) (1)
- 网络翻墙 (0)
- 编译原理 (1)
- 书籍推荐 (1)
- css (10)
- javaee环境搭建资料 (1)
- 开源工具 (1)
- 美国生活 (1)
- spring自学 (3)
- log4j (3)
- 算法与数据结构 (5)
- 病毒,插件处理大全 (1)
- flex (2)
- webservice (1)
- git (7)
- cs (1)
- html (4)
- javaee (6)
- 开车 (0)
- springmvc (3)
- 互联网架构 (2)
- intellij idea (18)
- maven (15)
- mongodb (2)
- nginx (1)
- react (3)
- java基础例子 (2)
- springboot (2)
- 培训 (5)
- mysql (3)
- 数据库 (3)
- 生活 (2)
- intellij (3)
- linux (2)
- os (3)
最新评论
-
潇洒天涯:
[color=blue][color=cyan] ...
oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 -
hekai1990:
受教了..
oracle中的varchar2
今天又研究了一下字符编码。写了些测试代码,算是比较了解了。
主要是研究 iso-8859-1
建议先看这篇:《第二篇:JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及...》
http://my.oschina.net/whp/blog/36846
然后再看看 iso-8859-1 的定义。
http://baike.baidu.com/view/2613676.htm
这一句话非常关键:
因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。
在工作中,从 web 提交的数据,到了 web 容器后,变成了 iso-8859-1 的字符串。
可以认为,被执行了如下代码:
byte[] buf_gbk = s.getBytes("gbk");
String sIso88591 = new String(buf_gbk, "iso-8859-1");
所以,我们获取数据时需要执行:
byte[] buf_iso88591 = sIso88591.getBytes("iso-8859-1");
String sGbk = new String(buf_iso88591, "gbk");
将编码转回 gbk。
我们本应该用gbk的编码来读取数据并解码成字符串,但结果却采用了ISO-8859-1的编码,导致生成一个错误的字符串。要恢复,就要先把字符串恢复成原始字节数组,然后通过正确的编码gbk再次解码成字 符串(即把以gbk编码的数据转成unicode的字符串)。注意,jvm中的字符串永远都是unicode编码的。
但编码转换并不是负负得正那么简单,这里我们之所以可以正确地转换回来,是因为 ISO8859-1 是单字节编码,所以每个字节被按照原样转换为String ,也就是说,虽然这是一个错误的转换,但编码没有改变,所以我们仍然有机会把编码转换回来!
看完这两篇后,写了段测试代码:
- package com.fsti.enc;
- public class EncUtil {
- public static String getHex(byte b)
- {
- String hex = Integer.toHexString(b & 0xff);
- if(hex.length()==1)
- {
- hex = "0" + hex;
- }
- return hex;
- }
- public static void showBytes(byte[] buffer)
- {
- for(int i=0; i<buffer.length; i++)
- {
- System.out.print( getHex(buffer[i]) + " ");
- }
- System.out.println();
- }
- public static void showChar(String s)
- {
- for(int i=0; i<s.length(); i++)
- {
- System.out.print( getHex((byte)(s.charAt(i))) + " ");
- }
- System.out.println();
- }
- }
- package com.fsti.enc;
- /**
- * http://baike.baidu.com/view/2613676.htm
- * @author zch
- * @date Apr 20, 2012
- *
- */
- public class Test_Iso8859_1 extends EncUtil{
- public static String s =
- "http://baike.baidu.com/view/2613676.htm\r\n" +
- " ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF," +
- "0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。" +
- "ISO-8859-1收录的字符除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语" +
- "对应的文字符号。欧元符号出现的比较晚,没有被收录在ISO-8859-1当中。\r\n" +
- " 因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何" +
- "编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是" +
- "个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。ASCII编码是一个7位的容器," +
- "ISO-8859-1编码是一个8位的容器。\r\n" +
- " Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。";
- public static void testChar(char c) throws Exception
- {
- //char c = '中';
- System.out.println( c );
- System.out.println( (int)c );
- System.out.println( Integer.toHexString(c) );
- if(c>255)
- {
- byte low = (byte)(c / 256);
- byte hight = (byte)(c % 256);
- System.out.println( getHex(low) );
- System.out.println( getHex(hight) );
- }
- }
- public static void testString() throws Exception
- {
- for(int i=0; i<s.length(); i++)
- {
- testChar(s.charAt(i));
- }
- }
- public static void testString_02() throws Exception
- {
- StringBuffer sb = new StringBuffer();
- for(int i=0; i<s.length(); i++)
- {
- char c = s.charAt(i);
- if(c>255)
- {
- char hight = (char)(c / 256);
- char low = (char)(c % 256);
- sb.append(hight);
- sb.append(low);
- }
- else
- {
- sb.append(c);
- }
- }
- String sIso88591 = sb.toString();
- System.out.println(sIso88591);
- byte[] buf = sIso88591.getBytes("iso-8859-1");
- showBytes(buf);
- String sUtf_8 = new String(buf, "gbk");
- System.out.println(sUtf_8);
- }
- public static void testString_03() throws Exception
- {
- System.out.println("s:" + s);
- byte[] buf_gbk = s.getBytes("gbk");
- System.out.println("buf_gbk:");
- showBytes(buf_gbk);
- StringBuffer sb = new StringBuffer();
- for(int i=0; i<buf_gbk.length; i++)
- {
- char c = (char)buf_gbk[i];
- sb.append( c );
- System.out.println(c + ":" + getHex((byte)c));
- }
- String sIso88591 = sb.toString();
- System.out.println("sIso88591:");
- System.out.println(sIso88591);
- System.out.println("showChar(sIso88591):");
- showChar(sIso88591);
- byte[] buf_iso88591 = sIso88591.getBytes("iso-8859-1");
- System.out.println("buf_iso88591:");
- showBytes(buf_iso88591);
- String sUtf_8 = new String(buf_iso88591, "gbk");
- System.out.println(sUtf_8);
- }
- public static void testString_04() throws Exception
- {
- System.out.println("s:" + s);
- byte[] buf_gbk = s.getBytes("gbk");
- System.out.println("buf_gbk:");
- showBytes(buf_gbk);
- String sIso88591 = new String(buf_gbk, "iso-8859-1");
- System.out.println("sIso88591:");
- System.out.println(sIso88591);
- System.out.println("showChar(sIso88591):");
- showChar(sIso88591);
- byte[] buf_iso88591 = sIso88591.getBytes("iso-8859-1");
- System.out.println("buf_iso88591:");
- showBytes(buf_iso88591);
- String sGbk = new String(buf_iso88591, "gbk");
- System.out.println(sGbk);
- }
- /**
- * @param args
- */
- public static void main(String[] args) throws Exception{
- //testString();
- //testString_02();
- testString_04();
- }
- }
参考资料:
http://my.oschina.net/whp/blog/36846
http://baike.baidu.com/view/2613676.htm
发表评论
-
【转】字符编码笔记:ASCII,Unicode 和 UTF-8
2017-12-12 19:09 452今天中午,我突然想搞清楚 Unicode 和 UTF-8 之 ... -
【转】HTTP协议及浏览器编码行为
2012-12-19 13:48 1395转自:http://blog.csdn.net/hap ... -
【转】JSP中request.getParameter()乱码问题
2012-09-11 14:12 3126第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特 ... -
【转】说说字符集和编码
2012-09-10 22:41 786很久很久以前,有一 ... -
【转】解决get方法传递URL参数中文乱码问题
2012-08-27 22:18 0来自:http://www.javaeye.com/top ... -
判断一个文本文件的编码格式
2012-08-27 17:40 0文件的字符集在Windows下有两种,一种是ANSI,一 ... -
【转】为什么用记事本保存的UTF-8格式的java文件不能编译通过?
2012-08-27 17:26 0Windows记事本默认保存的ANSI格式,java编 ... -
Eclipse中的Text File Encoding与文本文件的编码的关系
2012-08-27 17:25 1489当我们编写一个txt文件或jsp页面时,我们用默认的一种编码区 ... -
【转】有关保存文件时的编码选项与html/jsp页面设定字符编码的配置
2012-08-27 16:10 760分两种情况介绍 注:首先,各位得对一次 请求/响应 的 ... -
【转】内码转换技术
2012-08-27 16:04 0内码转换技术 好吧 ... -
【转】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础
2012-08-27 13:25 957这两天抽时间又总结/整理了一下各种编码的实际编码方式, ... -
【转】又一篇介绍计算机字符编码的好文——计算机中的字是如何处理的?
2012-08-26 21:50 0如果你用放大镜看一下,可以看出屏幕上的字是由一个一个的像素点组 ... -
【转】利用javascript完成URLEncoding功能
2012-08-27 11:25 748日常开发中,经常遇到由于页面不一致,导致由页面表单提交或超连接 ... -
【转】Java编码规范,在您进行编码之前应该阅读的规范
2012-08-27 11:25 823本文转载于:http://www.web3d.com. ... -
【转】第三篇:JAVA字符编码系列三:Java应用中的编码问题
2012-08-26 21:42 808这部分采用重用机制,引用一篇文章来完整本部分目标。 来源 ... -
【转】第二篇:JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码
2012-08-26 21:17 9531、函数介绍 在Java中,字符串用统一的Unico ... -
【转】form表单提交数据编码方式及tomcat的接受编码方式
2012-08-26 21:15 1585form有2中方法把数据提交给服务器,get和post,分别说 ... -
【转】TOMCAT中文问题,解决(全)(转载)
2012-09-11 14:30 692TOMCAT中文问题解决了.其他应用服务器的问题也可以 ...
相关推荐
水泥袋检测系统源码和数据集:改进yolo11-DCNV4
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
使用Plotly绘制散点图_柱状图_折线图_三维图_饼状图
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
光敏电阻接线图
MAX30102心率血样传感器原理图
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
胎儿脑部异常检测系统源码和数据集:改进yolo11-convnextv2
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
本项目为基于Kotlin语言的安卓Camera2拍照录像设计源码,总计包含48个文件,涵盖17个XML配置文件、10个WEBP图片文件、5个Kotlin源代码文件、3个Git忽略文件、3个Gradle配置文件、2个Markdown文档、2个属性文件、1个Gradle脚本文件、1个APK安装包以及1个JSON文件。该源码适用于实现安卓设备的拍照和录像功能。
【C#】设计模式大作业_pgj
本项目是一款基于ruoyi框架开发的校园后勤Vue前端设计源码,包含358个文件,涵盖122个Vue组件、93个SVG图标、87个JavaScript脚本、25个PNG图片、10个SCSS样式表、3个批处理脚本、3个JPG图片、2个HTML页面、2个JSON配置文件、2个备份文件。该代码适用于校园后勤管理系统,旨在提升校园后勤服务效率。
该项目是基于Spring Boot框架的校园外卖点餐系统设计源码,包含162个文件,包括142个Java源文件、16个XML配置文件、2个YML配置文件、1个Git忽略文件和1个XLSX文件。系统采用前后端分离架构,结合Mybatis、Spring Cache、阿里云OSS、Swagger、POI和WebSocket等技术,支持菜品、套餐、订单管理、支付、报表统计及用户催单等功能。系统分为后台管理端和用户端,用户端通过微信小程序实现。我的主要工作包括管理端员工及菜品信息的增删改查功能。
基于QT框架的OpenCV人脸识别
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
图像处理新思路:微生物菌落图像分割
该项目是一款基于Python核心的跨语言智能补全插件YouCompleteMe的设计源码,包含131个文件,涵盖57个Python文件、23个Vim配置文件、6个Markdown文件、5个C/C++源文件、3个YAML配置文件、3个文本文件以及少量其他类型的文件。该插件支持Python、C++、Shell、C等多种编程语言,旨在为开发者提供高效的代码补全功能。
英国MIDNORCO沉积物岩性数据集 内容: Fyfe, RM (2014) 发布的数据集详细记录了位于英国的MIDNORCO沉积物岩心的岩性特征。此数据集共包含12个数据点,提供了关于该地区地质结构的重要信息。通过访问以下链接可获取完整数据集:"" ()。这些数据对于研究古环境变化、地质年代测定以及了解地球历史具有重要意义。
内容: 本数据集记录了来自Filchner Trough的威德尔海豹(标记为FIL2014_wed_a_m_03)的潜水时长信息,由Bornemann H、Oosthuizen WC、Schröder M等人于2014年发布。该数据集包含了2033个数据点,提供了对单只威德尔海豹潜水行为的详细观察。通过访问以下链接可以获取完整的数据集详情:"" ()。这项研究有助于我们更好地理解威德尔海豹在南极海域中的生活习性与行为模式。
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作