java中编码问题的处理方案_java

首先我使用的开发环境是Eclipse.创建一个Java Project默认的编码则为GBK,如图:

下面便是具体代码:

import java.io.UnsupportedEncodingException;

public class Demo1 {
  public static void main(String[] args) throws UnsupportedEncodingException {
    String s = "我爱ABC";
    byte[] bytes1 = s.getBytes("gbk");//不写编码,则使用平台的默认字符集将此 String 编码为 byte序列,并返回byte[].
    //s.getBytes(Charset charset) 使用给定的charset将此String编码到byte序列;
    //返回的是一个byte[]字节数组

    for(byte b: bytes1){
      System.out.print(Integer.toHexString(b&0xff)+" ");
      //Integer.toHexString(int i)以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式
    }
    //gbk编码中文占有两个字节,英文占有一个字节
    System.out.println();
    byte[] bytes2 = s.getBytes("utf-8");
    for(byte b: bytes2){
      System.out.print(Integer.toHexString(b&0xff)+" ");
    }
    //utf-8编码 中文占有三个字节,英文占有一个字节
    System.out.println();
    //java是双字节编码 --->utf-16be >> 中文和英文都占有两个字节
    byte[] bytes3 = s.getBytes("utf-16be");
    for(byte b: bytes3){
      System.out.print(Integer.toHexString(b&0xff)+" ");
    }

    /*当你的字节序列是某种编码时,这个时候想把字节序列变成
     *字符串,也需要用这种编码方式,否则会出现乱码
     * */
    System.out.println();
    String str1 = new String(bytes3);//用项目默认的编码即(GBK编码) ----->> bytes3在上面定义成“utf-16be”的编码了,所以会出现乱码
    System.out.println(str1);
    System.out.println();

    String str2 = new String(bytes3,"utf-16be");
    System.out.println(str2);

   /*
    * 文本文件就是字节序列
    * 可以是任意编码的字节序列
    * 如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码
    *
   */
  }
}

打印的结果:

总的来说,编码必须对应,不然会出现乱码。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
编码
java编码中文乱码处理、java生僻字处理方案、java编码问题、js处理编码问题、java验证码编码问题,以便于您获取更多的相关知识。

时间: 2024-09-21 14:12:25

java中编码问题的处理方案_java的相关文章

java中lambda表达式简单用例_java

我对java中lambda表达式的看法是相当纠结的: 一个我这么想:lambda表达式降低了java程序的阅读体验.java程序一直不以表现力出众,正相反使Java流行的一个因素正是它的安全和保守--即使是初学者只要注意些也能写出健壮且容易维护的代码来.lambda表达式对开发人员的要求相对来说高了一层,因此也增加了一些维护难度. 另一个我这么想:作为一个码代码的,有必要学习并接受语言的新特性.如果只是因为它的阅读体验差就放弃它在表现力方面的长处,那么即使是三目表达式也有人觉得理解起来困难呢.语

Java中的collection集合类型总结_java

Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工具类(Iterator迭代器.Enumeration枚举类.Arrays和Collections). Java集合工具包框架如下图. 说明:看上面的框架图,先抓住它的主干,即Collection和Map. Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作

JAVA中的deflate压缩实现方法_java

在文件的传输过程中,为了使大文件能够更加方便快速的传输,一般采用压缩的办法来对文件压缩后再传输,JAVA中的java.util.zip包中的Deflater和Inflater类为使用者提供了DEFLATE算法的压缩功能,以下是自已编写的压缩和解压缩实现,并以压缩文件内容为例说明,其中涉及的具体方法可查看JDK的API了解说明. /** * * @param inputByte * 待解压缩的字节数组 * @return 解压缩后的字节数组 * @throws IOException */ pub

java中的移位运算符心得总结_java

java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >> 1,相当于num除以2 >>>    :     无符号右移,忽略符号位,空位都以0补齐 下面来看看这些移位运算都是怎样使用的 复制代码 代码如下: /** *  */package com.b510.test; /** * @author Jone Hongten * @creat

关于JAVA中this的使用方法小结_java

我知道很多朋友都和我一样:在JAVA程序中似乎经常见到"this",自己也偶尔用到它,但是到底"this"该怎么用,却心中无数!很多人一提起它,就说"当前对象",可到底什么是当前对象,是什么当前对象,他自己也不清楚.现在让大家看一个小例子,给你分享一下JAVA中"this"的用法! 复制代码 代码如下: /**  * @author fengzhi-neusoft  *  * 本示例为了说明this的三种用法!  */ pac

Java中的深拷贝和浅拷贝介绍_java

一.引言   对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去.在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部 数据.Java中有三种类型的对象拷贝:浅拷贝(Shallow Copy).深拷贝(Deep Copy).延迟拷贝(Lazy Copy). 二.浅拷贝 1.什么是浅拷贝   浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝.如果属性是基本类型,拷贝的就是基本类型的值:如果属性是内存地

Java中的static的使用指南_java

一.Java中的static使用之静态变量 1.Java 中被static修饰的成员称为静态成员或类成员.它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享.且优先于对象存在.静态成员可以使用类名直接访问,也可以使用对象名进行访问.使用 static 可以修饰变量.方法和代码块. 2.public 修饰符表示公开的.公有的,静态变量使用static修饰 3.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员. public class HellWorld{ String

详解Java中的final关键字的使用_java

final含义 final是Java中的一个保留关键字,可以声明成员变量.方法和类.一旦你将引用声明为final类型,你将不能再改变这个引用了.编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误.final变量 凡是对成员变量或者本地变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫做final变量.下面是final修饰变量的例子: final int constValue = 1; // constValue = 2; The final local va

深入理解java中i++和++i的区别_java

今天简单谈谈关于java的一个误区,相信很多刚开始学习java的朋友都会遇到这个问题,虽然问题很简单,但是经常容易搞混,说说java的i++和++i的区别. 先看一下代码: <span style="font-size:18px;">public class test { public static void main(String[] args) { int i = 0; for (int j = 0; j < 10; j++) { i=i++; } System.