关于Java的字符编码

package 测试想法的小示例代码;

import java.io.CharArrayWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class 关于字符串转码 {

    private static String printByteArray(byte[] byteArray) {
    String javaForm = "Java中的有符号表示形式: " + Arrays.toString(byteArray) + " ; ";
    CharArrayWriter caw = new CharArrayWriter();
    PrintWriter outs = new PrintWriter(caw);
    outs.print("十六进制表示形式(有用的形式): ");
    outs.print("[");
    for (int i = 0; i < byteArray.length; i++) {
        outs.format("0x%02X, ", byteArray[i]);
    }
    String hexForm = caw.toString();
    hexForm = hexForm.substring(0, hexForm.length() - 2);
    hexForm = hexForm + "]";

    return javaForm + hexForm;
    }

    private static void printStringCode(String str) {
    try {
        System.err.println("\"" + str + "\"编码如下:");
        System.out.println("\t(UTF-8): " + printByteArray(str.getBytes("UTF-8")));
        System.out.println("\t(UTF-16): " + printByteArray(str.getBytes("UTF-16")));
        System.out.println("\t(GBK): " + printByteArray(str.getBytes("GBK")));
        System.out.println("\t(GB2312): " + printByteArray(str.getBytes("GB2312")));
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    return;
    }

    public static void main(String[] args) throws Exception {
    // 0xCE,0xD2 是‘我‘字的GBK编码
    // 因为Java编译器能识别的byte类型最大表示范围是-128~127,但由于0xCE和0xD2都大于127
    // 故要先把这两个数字转为负数存进byte类型中
    // (因为计算机中是以补码形式保存数据,故以负数存进byte数组后,实际保存的二进制数据还是0xCE和0xD2)
    byte[] getParam = new byte[] { -((byte) (256L - 0xCE)), -((byte) (256L - 0xD2)) };
    String value = new String(getParam, "ISO-8859-1"); // 将‘我‘字的GBK编码数据原样复制到到String对象中
    byte[] b = value.getBytes("ISO-8859-1"); // 将value字符串对象中的数据原样复制到byte数组b中.
    String newValue = new String(b, "GBK"); // 将数组b中的数据以GBK编码的方式转码成字符串对象的内部编码形式(GBK->UTF-16)
    System.out.println(newValue);

    printStringCode("我");

    printStringCode("们");
    }
}

原文地址:https://www.cnblogs.com/tonekit/p/12131439.html

时间: 2024-08-09 20:08:30

关于Java的字符编码的相关文章

java语言字符编码问题

上代码 import java.io.*; public class EncodingDemo { public static void main(String[] args) { System.getProperties().list(System.out); try { FileWriter fw=new FileWriter("F:\\workspace\\JavaPrj\\test.txt"); fw.write("小超是个好孩子!"); fw.close(

java/mysql字符编码

碰到java/mysql字符编码问题,后来发现是utf-8编码相关问题, 最开始怀疑是在java springmvc相关框架处理中出现的错误,花费了很多时间去查找.这是思维的狭隘处,应该在整理理一遍,排除变量的方式,了解问题在哪. 幸好有另一台测试机及数据库,在该机器上部署的没有问题. 定位在本机的数据库上. 参考http://my.oschina.net/linland/blog/32525 http://blog.csdn.net/zhaozetu/article/details/86813

JAVA中文字符编码问题

JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问 题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经掌握了对付这些字符乱码怪兽的诀窍.可当过段时间,换了个应用或换了个环境,又会碰到那讨厌的火 星文,并再次无所适从.于是下决心好好整理一下中文字符编码问题,以方便自己记忆,也为其他程序员兄弟们提供一份参考. 首先要了解JAVA处理字符的原理.JAVA使用UNICODE来存储字符数据,处理字符时通常有

JAVA基础——字符编码

字符编码 一.概述 InputStreamReader OutputStreamWriter 字符转换流是字符流与字节流转换的桥梁,同时加入了编码转换. 二.编码表的由来 计算机只能识别二进制数据,早期由来是电信号: 为了方便应用计算机,识别各个国家的文字: 就将各个国家的文字用数字来表示,并一一对应,形成一张表,这就是编码表. 三.常见的编码表 注意: 1.Java语言char类型使用的是Unicode 2.UTF-8每一个字节的开头都加有标识头,加完后很容易区分.UTF-8中汉字用3个字节表

java基础----&gt;java中字符编码问题(一)

这里面对java中的字符编码做一个总结,毕竟在项目中会经常遇到这个问题. 文件的编码格式 一.关于中文的二进制字节问题 public static String CHARSET_TEXT = "我爱LL"; // 打印字节的16进制表示 private void printBinarys(byte[] buffer) { for (byte b : buffer) { System.out.print(Integer.toHexString(b & 0xff) + "

Java中字符编码和字符串所占字节数 .

首 先,java中的一个char是2个字节.java采用unicode,2个字节来表示一个字符,这点与C语言中不同,C语言中采用ASCII,在大多数 系统中,一个char通常占1个字节,但是在0~127整数之间的字符映射,unicode向下兼容ASCII.而Java采用unicode来表示字符,一个中文或英文字符的unicode编码都占2个字节,但如果采用其他编码方式,一个字符占用的字节数则各不相同. 在 GB 2312 编码或 GBK 编码中,一个英文字母字符存储需要1个字节,一个汉字字符存储

JAVA 23 字符编码问题

gbk 两个字节. 转换流. 使用转换流的时候可以指定码表. InputStreamReader in = new InputStreamReader(new FileInputStream("abc.txt"),"utf-8");//以utf-8形式读取文本文件 OutStreamWrtier out = new OutStreamWriter(new FileOutputStrem("abc.txt"),"utf-8")'

Java IO4:字符编码

前言 字符编码,这本不属于IO的内容,但字节流之后写的应该是字符流,既然是字符流, 那就涉及一个"字符编码的"问题,考虑到字符编码不仅仅是在IO这块,Java中很多场景都涉及到这个概念,因此这边文章就专门详细写一下字符编码,具体 的网上有很多,但本文目的是尽量讲清楚各种编码方式的作用,个人认为,不求.也没有必要对字符编码理解地多么深入. 字符集和字符编码 第一个概念就是字符集和字符编码之间的区别: 1.字符集(charset) 字符集指的是一个系统支持的所有抽象字符的集合.字符是各种文

java字符编码详解

引用自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK.GB2312.iso-8859-1之间的区别 GB2312,由中华人民共和国政府制定的,简体汉字编码规范,大陆所有计算机中的简体中文,都使用此种编码格式.目前,我也不知道还有另外的简体汉字编码规范.与此对应的还有BIG5,是中华民国政府制定的,繁体汉字的编码规范,一般应用于海外计算机的繁体中文显示.所谓的繁体中文Windows,简体中文Windows,指的就是采用BIG5和