- 浏览: 264826 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
zwhc:
finalerboy 写道有问题的。。。而且问题多得很,你自己 ...
将数字转为指定长度的字符串,如果位数不够,添加前缀 0 -
finalerboy:
有问题的。。。而且问题多得很,你自己试试
for(int j ...
将数字转为指定长度的字符串,如果位数不够,添加前缀 0 -
a542435582:
没有考虑中文哦,实现了三分之一
以 UE 十六进制编辑模式的显示方式显示数据 -
white_crucifix:
kyfxbl 写道左耳朵耗子这人感觉挺装的,发的帖子也没什么营 ...
atoi -
kyfxbl:
左耳朵耗子这人感觉挺装的,发的帖子也没什么营养,我已经取消关注 ...
atoi
今天又研究了一下字符编码。写了些测试代码,算是比较了解了。
主要是研究 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。
看完这两篇后,写了段测试代码:
参考资料:
http://my.oschina.net/whp/blog/36846
http://baike.baidu.com/view/2613676.htm
主要是研究 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。
看完这两篇后,写了段测试代码:
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
发表评论
-
递归查找指定的目录,将所有的md转换成html
2015-02-16 13:33 1719在 github.com fork 了 markdown2ht ... -
弈城围棋棋谱下载,附源码
2014-06-10 21:55 2532弈城围棋的解说用的好象是 sgf 第一版的。 平时我们用的 s ... -
appfuse 非常棒
2014-05-31 14:17 1318appfuse 非常棒 【1】在线 demo http:// ... -
stripes spring annotation
2014-05-02 14:19 819stripes 源码阅读 stripes-code-1527 ... -
junit annotation
2014-05-02 01:15 1248写了个简单的 junit 启动器。 package ... -
一种变形全排列算法
2013-06-07 17:39 1451public static boolean next(i ... -
typoglycemia
2012-11-05 23:52 1606单词里面字母乱序不影响阅读的现象,学名叫做Typoglycem ... -
axis 源码初步研读
2012-10-16 15:41 1693经过反复跟踪,这段代码比较重要: org.apache.ax ... -
电信彩信附件,webservice HttpURLConnection
2012-10-16 15:26 1776电信彩信附件,webservice HttpURLConnec ... -
java final parameter
2012-09-14 19:28 1131一些代码里,参数前加了 final 修饰符,不太明白这样做的原 ... -
hibernate like in 多表 查询
2012-09-07 12:24 1600public List getMaintainList( ... -
学一篇韵文,识天下汉字
2012-08-20 15:49 1772学一篇韵文,识天下汉字 http://blog.renren. ... -
简易建表工具
2012-07-19 16:56 0简易建表工具 生成 oracle 表。 -
正则表达式测试工具。
2012-05-29 17:47 1183http://docs.oracle.com/javase/t ... -
关于 《Java 性能优化之 String 篇》 的疑问
2012-05-18 11:55 1170原文地址在: http://www.ibm.com/devel ... -
java char
2012-04-24 09:30 3077刚才简单研究了一下 char 。 比想象的复杂得多。主要应该 ... -
java 死循环
2012-03-08 15:46 1081写了这么段代码,居然出现死循环了。真晕。 /** ... -
利息计算
2011-11-29 01:00 1298/** * 利息计算: * 借款 12000,一年 ... -
Enum 如何继承?
2011-11-08 20:30 2983Enum 如何继承? public abstract clas ... -
enum 的 name 是如何传进去的呢?
2011-11-08 17:48 1427enum 的 name 是如何传进去的呢? public e ...
相关推荐
UTF-8、ISO-8859-1 和 GBK 是三种常见的字符编码格式,每种都有其特定的应用场景和优缺点。 首先,UTF-8 是一种广泛使用的多字节编码,能够表示几乎所有的Unicode字符,包括中文。在Java中,UTF-8 支持国际化,是...
### JAVA字符编码详解:Unicode, ISO-8859-1, GBK, UTF-8 及其相互转换 #### 一、引言 在Java编程中,字符编码的管理和转换是一项基本而又重要的任务。不同的编码标准适用于不同的场景,而理解和掌握这些编码之间...
标题提到的"OC GZIP解压/压缩ISO-8859-1编码格式"涉及到的是Objective-C(简称OC)中的GZIP操作以及字符编码ISO-8859-1。这里我们将深入探讨这两个知识点。 首先,让我们来了解一下`GZIP`。GZIP是一种基于DEFLATE...
### 关于JAVA字符编码:Unicode, ISO-8859-1, GBK, UTF-8 编码及相互转换 在Java开发过程中,字符编码是处理文本数据的基础,不同的编码方式会影响数据的存储、传输以及显示。本文将详细介绍几种常见的字符编码...
字符编码标准之GBK、GB2312、UTF-8和ISO-8859-1的比较 字符编码标准是计算机领域中的一项基本技术,用于将文字或符号转换为计算机能够识别的二进制代码。常见的字符编码标准有GBK、GB2312、UTF-8和ISO-8859-1等,...
2. **ISO 8859-1编码**:ISO 8859-1是一种单字节编码方案,也被称为Latin-1,主要用于西欧语言。它包含128个基本ASCII字符以及128个额外的西欧语言特殊字符,但不支持中文等东亚语言。 3. **UTF-8编码**:UTF-8是...
本文将深入探讨四种常见的字符集编码:ISO-8859-1、GBK、GB18030以及Unicode,并结合Java国际化的字符集转换进行详细说明。 1. ISO-8859-1:这是一种西欧字符编码,包含拉丁字母、数字、标点符号和一些特殊字符。它...
在Java中,当我们从客户端接收数据时,有时数据可能是按照ISO-8859-1编码的。如果我们要正确处理这些数据,需要将其转换为Java默认或者更通用的UTF-8编码。转换的代码如下所示: ```java public static String ...
- 这种转换会导致乱码,因为GBK编码的字节流不能直接转换为ISO-8859-1编码。 - 解决方法:先将GBK编码的字节流转换为Unicode,然后再从Unicode转换为ISO-8859-1。 - 示例:`String s = "中文"; byte[] gbks = s....
附件中:FileEncodeDetector.java 此文件可以检测指定文件的编码格式 public static String getFileEncode(File file) {...} 附件中:FileCharsetConverter.java 此文件可以实现两个编码的相互转换 ...
java自动获取文件的编码,智能识别文件编码,支持本地file及指定url的编码识别,支持多达40余种编码的识别,包括最常见的UTF-8,GBK,GB2312,BIG5,UNICODE,ISO8859_1,ASCII等,FileUtil.java里有对...
在这个场景下,"java转码代码"指的是用于解决Java程序中遇到的乱码问题的代码段,而"ISOtoGbk.java"可能是一个源代码文件,专门用于将遵循ISO-8859-1编码的字符转换为GBK编码。 GBK是中文环境下广泛使用的字符编码...
实现不同文件代码类型,诸如 Shift_JIS、EUC-JP、ISO-2022-JP、 Unicode、UTF-8 的相互変換,FREE软件
然而,这种方法仅适用于UTF-8的检测,且无法识别其他编码格式,如GBK、ISO-8859-1等。当需要处理各种未知编码格式的文件时,可以借助第三方库cpdetector。 cpdetector是一个轻量级的开源项目,它的大小大约为500KB...
这是因为Java默认使用Unicode编码,而数据库可能使用ISO-8859-1。在存储时,需要将Unicode字符串转换为ISO-8859-1,从数据库读取时再转换回来。例如,`new String(str.getBytes("gbk"), "iso-8859-1")` 和 `new ...
ISO-8859-1是一种单字节编码,主要用于西欧语言,如果需要支持,只需要将`Charset.forName()`中的编码名替换为"ISO-8859-1"即可。 在实际应用中,确保正确选择编码是至关重要的,否则可能会导致乱码问题。因此,...
使用此修补程序,您可以轻松发送带有ISO-2022-JP编码的邮件(所谓的“ JIS-CODE”)。 (ja) mail-iso-2022-jpは, に対するパッチです。チです利用するとISO-2022-JP (いわゆる「JISコード」)でのメール送信が...
对于大多数数据库的 JDBC 驱动程序,在 Java 程序和数据库之间传递数据都是以 ISO-8859-1 为默认编码格式,所以,我们在程序中向数据库存储包含中文的数据时,JDBC 驱动程序首先把程序内部的 Unicode 编码格式的数据...
java编码转换工具
这里的关键在于:`str.getBytes("iso-8859-1")` 先将字符串转换为 ISO-8859-1 编码的字节数组,然后再使用 `new String(bytes, "gb2312")` 按照 GB2312 编码解码为字符串。 **2. HTTP 请求中的字符编码问题** 在...