`
benx
  • 浏览: 273336 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java字符编码实验

    博客分类:
  • java
阅读更多

 

 

 

 

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class Test {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		String str = "Hello台灣-台湾-중국어123-!@#-,./";
		//String str = "Hello台灣-台湾123-!@#-,./";
		Set<String> charSetKey = Charset.availableCharsets().keySet();
		List<String> supportChinaCharsetList = new ArrayList<String>();
		for (String charSet : charSetKey) {
			try {
				String result = new String(str.getBytes(charSet), charSet);
				System.out.println(charSet+":   " + result);
				if (result.equals(str)) {
					supportChinaCharsetList.add(charSet);
				}
			} catch (Exception e) {
				System.out.println(charSet + " UnsupportedEncoding");
			}
		}

		System.out.println(supportChinaCharsetList);

	}

	static void print(byte[] bytes) {
		for (byte b : bytes) {
			System.out.print(b);
		}
		System.out.println();
	}

}

 运行结果如下:

String : Hello台灣-台湾123-!@#-,./ getBytes By Big5 is :72101108108111-91120-588745-91120634950514533643545444647

Hello台灣-台?123-!@#-,./

String : Hello台灣-台湾123-!@#-,./ getBytes By Big5-HKSCS is :72101108108111-91120-588745-91120634950514533643545444647

Hello台灣-台?123-!@#-,./

String : Hello台灣-台湾123-!@#-,./ getBytes By EUC-JP is :72101108108111-62-26-33-4445-62-26-49-474950514533643545444647

Hello台灣-台湾123-!@#-,./

.

.

.

.

String : Hello台灣-台湾123-!@#-,./ getBytes By x-windows-50221 is :72101108108111273666661029584274066452736666610279812740664950514533643545444647

Hello台灣-台湾123-!@#-,./

String : Hello台灣-台湾123-!@#-,./ getBytes By x-windows-874 is :7210110810811163634563634950514533643545444647

Hello??-??123-!@#-,./

String : Hello台灣-台湾123-!@#-,./ getBytes By x-windows-949 is :72101108108111-9-69-40-6745-9-69634950514533643545444647

Hello台灣-台?123-!@#-,./

String : Hello台灣-台湾123-!@#-,./ getBytes By x-windows-950 is :72101108108111-91120-588745-91120634950514533643545444647

Hello台灣-台?123-!@#-,./

String : Hello台灣-台湾123-!@#-,./ getBytes By x-windows-iso2022jp is :72101108108111273666661029584274066452736666610279812740664950514533643545444647

Hello台灣-台湾123-!@#-,./

 

支持中文编码集合

[EUC-JP, GB18030, GBK, ISO-2022-JP, Shift_JIS, UTF-16, UTF-16BE, UTF-16LE, UTF-8, windows-31j, x-euc-jp-linux, x-EUC-TW, x-eucJP-Open, x-IBM33722, x-IBM930, x-IBM939, x-IBM942, x-IBM942C, x-IBM943, x-IBM943C, x-mswin-936, x-PCK, x-windows-50220, x-windows-50221, x-windows-iso2022jp]


 

 

 

再看下面这个例子,如果大家把这个弄清楚,编码问题应该不是问题了

import java.io.UnsupportedEncodingException;

public class A {
	public static void main(String[] args) throws UnsupportedEncodingException {
		/**
		 *  -52 -88 -51 -27 
			-52 -88 -51 -27 
			-52 -88 -51 -27 
			-52 -88 -51 -27 
			台湾
		 */
		transfer("台湾","gb2312","ISO-8859-1");
		
		/**
		 *  -52 -88 63 
			-52 -88 63 
			-52 -88 63 
			-52 -88 63 
			台?
		 */
		transfer("台灣","gb2312","ISO-8859-1");
		
		/**
		 *  -52 -88 -98 -77 
			-52 -88 -98 -77 
			-52 -88 -98 -77 
			-52 -88 -98 -77 
			台灣
		 */
		transfer("台灣","gbk","ISO-8859-1");
		
		/**
		 * 
			63 63 
			63 63 
			63 63 
			63 63 
			??
		 */
		transfer("台灣","ISO-8859-1","gbk");
		
		/**
		 * -27 -113 -80 -25 -127 -93 
			-27 -113 -80 -25 -127 -93 
			-27 -113 -80 -25 -127 -93 
			-27 -113 -80 -25 -127 -93 
			台灣
		 */
		transfer("台灣","utf-8","ISO-8859-1");
		
		/**
		 * 63 63 
			63 63 
			63 63 
			63 63 
			??
		 */
		transfer("台灣","ISO-8859-1","utf-8");
		
		/**
		 * -27 -113 -80 -25 -127 -93 
			-27 -113 -80 -25 -127 -93 
			-27 -113 -80 -25 -127 -93 
			-27 -113 -80 -25 -127 -93 
			台灣
		 */
		transfer("台灣","utf-8","gbk");
		
		/**
		 *  -52 -88 -98 -77 
			-52 -88 -17 -65 -67 -17 -65 -67 
			-52 -88 -17 -65 -67 -17 -65 -67 
			-52 -88 -17 -65 -67 -17 -65 -67 
			台锟斤拷
		 */
		transfer("台灣","gbk","utf-8");
		
	}

	static void transfer(String str, String set1, String set2) throws UnsupportedEncodingException {
		//encode
		//把str使用set1编码获取bytes,然后把bytes使用set2编码转换成字符串
		String set2String = new String(str.getBytes(set1), set2);
		//打印str的set1编码bytes
		print(str.getBytes(set1));
		//打印转换后的set2编码的bytes
		print(set2String.getBytes(set2));

		//decode
		//使用set2的编码获取原始bytes,然后使用set1编码转换成字符串
		String set1String = new String(set2String.getBytes(set2), set1);
		print(set2String.getBytes(set2));
		print(set1String.getBytes(set1));
		System.out.println(set1String);
		
		System.out.println();
		System.out.println();
	}

	static void print(byte[] bys) {
		for (byte b : bys) {
			System.out.print(b+" ");
		}
		System.out.println();
	}

}
 

 

 

 

分享到:
评论

相关推荐

    java基本数据类型和数组,java编制0-255之间的UNICODE编码表

    一、实验目的: 1、掌握数组的定义、初始化与... 1、要求输出UNICODE编码在0-255之间的编码值与相应的字符。 2、使用已知给定的数值初始化一个5X5的二维数组。 3、输出转置前后的数组。 3、实验报告给出完整代码。

    实验四 字符串和输入输出流的实验(1).doc

    首先判断输入字符串长度是否位 8,在编码得出字符串中数字有多少位,若以上条件都满足。则 Valid PassWord。 2. 代码编写 ```java import java.util.Scanner; public class ShiYan { public static void main...

    用c++实现霍夫曼编码——多媒体实验内容

    在实验程序中,我们首先统计了输入字符串中每个符号的频率,然后根据频率构建霍夫曼树。接着,我们使用`GetCode`函数生成霍夫曼编码。 霍夫曼编码的优点是可以实现高效的数据压缩,减少数据的存储空间和传输时间。...

    西南科技大学Java程序设计与实践 实验五 IO实验--记事本

    完成以上内容选做选做:设定循环加解密规则如下:按照ASCII字符编码(0-255),加密时对每一字符+10,(若超过255,减去255),解密时作对应反变换。编程实现文件的“新建”、“打开”(将加密文本文件“D:\1.txt”...

    CIS355-Java:CIS355-Java编码分配

    CIS355-Java CIS355-Java编码分配实验1:使用Java评估表达式,转义序列和文本的基本练习实验2:演示使用类来创建和对象,使用mutator和accessor方法以及在两个不同文件中的两个不同类之间传递值实验3:练习使用循环...

    java课程实验

    3、按照要求使用Java进行编码。 1) 设计一个教师类Teacher,属性有编号(no)、姓名(name)、年龄(age)、所属学院(seminary),为这些属性设置相应的get和set方法; 2) 为Teacher类添加方法equals;(当两个教师...

    词法分析设计 编译原理实验指导书

    实验学时:4 ...通过输入源程序从左到右对字符串进行扫描和分解,依次输出各个单词的内部编码及单词符号自身值;若遇到错误则显示“Error”,然后跳过错误部分继续显示 ;同时进行标识符登记符号表的管理。

    word源码java-poc:编译原理实验

    通过输入源程序从左到右对字符串进行扫描和分解,依次输出各个单词的内部编码及单词符号自身值;若遇到错误则显示“Error”,然后跳过错误部分继续显示 ;同时进行标识符登记符号表的管理。 以下是实现词法分析设计...

    做Java项目过程中遇到乱码问题的解决方案

    在做java项目(特别是web项目)的过程中,中文乱码一直是我们开发人员比较头疼的问题,因为涉及到编码,解码,字符集,以及国际化等诸多问题,所以在着手解决的时候也缺乏相关的知识。我花了一些时间自己动手实验了...

    实验三Socket通信实验报告.doc

    //将字符串写入数据流中 reqStreamW.Flush ( ) ; //清理当前编写器的所有缓冲区,并使所有缓冲数据写入基础流 2. 群组通信功能 组播编程需要UDP,有两个类支持组播网络编程Socket和UdpClient.一台计算机要加 入某一...

    合工大宣城校区编译原理实验报告(实验一、二、三)

    通过输入源程序从左到右对字符串进行扫描和分解,依次输出各个单词的内部编码及单词符号自身值;若遇到错误则显示“Error”,然后跳过错误部分继续显示 ;同时进行标识符登记符号表的管理。 以下是实现词法分析设计...

    实验七 JSP访问数据库.doc

    在上面的 JSP 语句中,我们首先设置了字符编码为 utf-8,然后使用 request 对象获取录入的个人信息,并将其添加到数据库中。 四、实验结果 通过实验,我们成功地实现了个人信息的增删改查模块,并熟悉了 JDBC 的...

    java基本数据类型和数组

    1、要求输出UNICODE编码在0-255之间的编码值与相应的字符。 2、使用已知给定的数值初始化一个5X5的二维数组。 3、输出转置前后的数组。 4、实验报告给出完整代码。

    实验2 类和继承(4学时)

    3、按照要求使用Java进行编码。 设计一个教师类Teacher,属性有编号(no)、姓名(name)、年龄(age)、所属学院(seminary),为这些属性设置相应的get和set方法; 为Teacher类重写equals方法;(当两个教师对象的...

    使用PHP将图片转化为base64数据流

    本实验主要使用GD库、函数的封装和调用实现图片和base64编码数据流的转化,通过本案例转换后得到的base64编码字符串,可以存放到数据库中,需要时可以直接从数据库中读取,减少访问图片时的请求数量。

    JavaWeb开发技术-解决中文输出乱码问题.docx

    字符与字节之间的转换是通过查码表完成的,将字符转成字节的过程称为编码,将字节转换成字符的过程称为解码,如果编码和解码使用的码表不一致,就会导致乱码问题。通过本案例来解决中文输出乱码问题。 使用...

    现代密码学实验报告.pdf

    回答:弱密钥(十六进制编码) :001FEFEFEFEFEFEFEFE1F1F1F1F0F0F0E0EE0E0E0E0F1F1F1F1。 半弱密钥:E01FE01FE01FE01FFE01FE01FE01FE01E001E001F101F101FE1FFE1FFE01FE01。 2. 改变明文或密钥中的一个比特值可能...

    基于OCR信息的JBIG2编码算法 (2006年)

    二值图像编码在文本存储、图象...图像中所有识别结果可信的字符被重建字模代替,编码器只需编码字符的位置。实验结果表明:该算法优于以往JBIG 2算法的效果,它可以获得高于以往有损压缩算法的图像质量,并在实验图像上

    算法设计与分析:分治法、贪心与动态规划在实际问题中的应用与实践

    实验任务多样,包括模拟生命游戏、对DNA序列进行分类、实现字符串匹配算法、设计循环赛日程安排以及求解最大连续子序列和问题。 在实验设备和工具方面,报告指出了使用的是Win10电脑和Visual Studio或Microsoft ...

    算法设计与分析:分治法与动态规划在经典问题求解中的应用

    实验任务多样,包括了生命游戏模拟、带锁的门问题、三壶谜题、字符串匹配问题、交替放置的碟子问题以及最大连续子序列和问题等。 在实验设备和工具方面,报告指出了使用的是惠普Win10电脑和Java/Python环境下的...

Global site tag (gtag.js) - Google Analytics