`
benx
  • 浏览: 276321 次
  • 性别: 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字符流的使用,特别是在文件操作中的应用。Java字符流主要用于处理基于Unicode编码的字符数据,它分为输入流(Reader)和输出流(Writer),用于读取和写入字符数据。 实验的...

    Java中文字符编码探究.pdf

    Java中文字符编码探究 Java中文字符编码探究是Java开发者经常遇到的问题之一。在处理中文时,乱码问题是无法避免的。这篇论文通过大量的实验和编码知识支持,探索了Java在不同介质中对汉字的编码,解决了以不同字符...

    Java 字符串与文本相关实例源码

    在Java编程语言中,字符串(String)是至关重要的数据类型,用于处理文本信息。字符串是不可变的,这意味着一旦创建,就不能更改其...通过学习和实践这些示例,开发者可以更好地掌握Java字符串操作的技巧,提升编程能力。

    09 数组及字符串实验

    5. **字符编码**:理解ASCII码、Unicode和UTF-8等字符编码体系,以及它们在处理多语言字符串时的作用。 6. **字符串函数库**:学习并使用编程语言提供的内置字符串函数,如C++的std::string类库,Python的str模块,...

    Java 网络编程实验报告 含实验总结

    Java的I/O库非常强大,包括了流(Streams)、缓冲区(Buffer)、字符编码(Encodings)和对象序列化(Serialization)等多个方面。在这个实验中,可能使用了`java.io`和`java.nio`包下的类,如`InputStream`、`OutputStream`...

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

    在Java中,字符型数据类型的长度为16位,可以表示65536个不同的字符。`char`类型的变量通常用于存储单个字符,例如 `'a'` 或 `'B'`。 ### 2. 数组(Array) 数组是Java中最基本的数据结构之一,用于存储固定大小的同...

    JAVA算术编码

    在提供的压缩包中,"20105333-算法-袁有根-算术编码 java实现"可能是实现算术编码的Java源代码,而"20105333-算法-袁有根-算术编码 java实现.doc"则可能包含了实验报告,详细解释了程序的设计思路、实现细节以及实验...

    java实验报告———JavaSwing编程.pdf

    4. OCR(光学字符识别)技术用于将扫描或照片中的打印文字转换成机器编码文本,通常用在文档扫描和数字化过程中。文中提到的识别错误可能指扫描文件时未能正确识别文本,这在将纸质文档转为电子版时是一个常见问题。...

    Java实验教程 实验报告 有项目工程文件

    压缩包中的文件名看起来可能是经过编码或非标准字符表示的,这通常是由于文件名包含了特殊字符或者非ASCII字符导致的。在实际操作中,学习者需要正确解压文件,确保所有项目工程文件能够完整恢复,以便于运行和分析...

    哈夫曼编码译码器,并附有实验报告

    在构建哈夫曼树的过程中,频率低的字符对应较短的编码,频率高的字符对应较长的编码,这样可以使得高频字符在编码过程中占用较少的位数,从而达到压缩数据的目的。这个过程包括以下步骤: 1. **频率统计**:首先,...

    Java语言基础实验报告.pdf

    通过实验,学生可以了解Unicode编码和Java语言的字符串处理。 8. 编程实验:分析输入的数字 本实验中,学生需要编写一个Java程序,分析输入的数字。通过实验,学生可以了解Java语言的输入输出处理和数字处理。 三...

    java文件流学习实验

    如果处理的是文本文件,通常推荐使用字符流,因为它们能自动处理字符编码。 4. **缓冲流**:为了提高效率,Java提供了带有缓冲功能的BufferedInputStream和BufferedOutputStream。它们会在内存中创建一个缓冲区,...

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

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

    《剪刀石头布(Java)》实验报告

    ### 《剪刀石头布(Java)》实验报告解析 #### 实验背景 剪刀石头布游戏是一款简单而有趣的互动游戏,通常用于决定事情或解决争议。本实验旨在通过编程方式实现这一游戏,并借此深入了解Java语言的基础知识及其...

    哈夫曼编码实验报告及源码

    在"哈夫曼编码实验报告及源码"中,我们可以期待学习到以下几个关键知识点: 1. **哈夫曼树的构造**:首先,我们需要理解如何构建哈夫曼树。通常,我们从一个字符集合开始,每个字符代表一个频率(或权重)。我们...

    通讯录JAVA程序设计实验报告

    ### 通讯录JAVA程序设计实验知识点总结 #### 一、实验背景及目标 本次实验的主要目的是设计并实现一个简单的通讯录管理系统,通过Java语言来管理个人信息。这些信息包括姓名、固定电话、手机号码、邮编、地址以及...

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

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

    Java大学实用教程 实验二 基本数据类型和数组 实验报告

    通过这个实验,学生不仅能学习到Java的基本数据类型和类型转换,还能掌握如何从键盘读取数据,并理解Unicode字符集的工作原理。这些基础知识对于进一步学习Java编程至关重要,也是后续学习面向对象编程、类和对象等...

    JAVA实验例子代码

    例如,`Example2_1`演示了字符和整型之间的转换,以及Unicode编码。在Java中,每个字符都有一个对应的Unicode值,可以通过类型转换将字符转换为整型或反之。例子2_2讨论了不同类型间的转换,如将长整型赋值给整型...

    信息论与编码课程设计实验报告java

    【信息论与编码课程设计实验报告java】主要探讨了如何使用Java实现n元Huffman编码和游程编码,这是两种常见的数据压缩技术。Huffman编码是基于概率的变长编码方式,尤其适用于文本压缩,而游程编码则常用于图像处理...

Global site tag (gtag.js) - Google Analytics