`

转:Java 字符串编码

    博客分类:
  • Java
阅读更多
出处:http://blog.sina.com.cn/s/blog_3f4dc73b0100afub.html


在JAVA中,一个char是2个字节(byte),而一个中文汉字是一个字符,也是2个字节。所以可以把汉字赋值给char。而英文字母都是一个字节的,因此它也能保存到一个byte里,一个中文汉字却不能。

char型字符单独在输出语句时,输出它的字符本身,与+相连时,输出它的ASCII码值。

UTF-16BE和UTF-16LE是UNICODE编码家族的两个成员。UNICODE标准定义了UTF-8、UTF-16、UTF-32三种编码格式,共有UTF-8、UTF-16、UTF-16BE、UTF-16LE、UTF-32、UTF-32BE、UTF-32LE七种编码方案。JAVA所采用的编码方案是UTF-16BE。

字符编码例:

import java.io.UnsupportedEncodingException;    
public class EncodeTest {    
       
    public static void printByteLength(String s, String encodingName) {    
        System.out.print("字节数:");    
        try {    
            System.out.print(s.getBytes(encodingName).length);    
        } catch (UnsupportedEncodingException e) {    
            e.printStackTrace();    
        }    
        System.out.println(";编码:" + encodingName);    
    }    
   
    public static void main(String[] args) {    
        String en = "A";    
        String ch = "人";    
   
        // 计算一个英文字母在各种编码下的字节数    
        System.out.println("英文字母:" + en);    
        EncodeTest.printByteLength(en, "GB2312");    
        EncodeTest.printByteLength(en, "GBK");    
        EncodeTest.printByteLength(en, "GB18030");    
        EncodeTest.printByteLength(en, "ISO-8859-1");    
        EncodeTest.printByteLength(en, "UTF-8");    
        EncodeTest.printByteLength(en, "UTF-16");    
        EncodeTest.printByteLength(en, "UTF-16BE");    
        EncodeTest.printByteLength(en, "UTF-16LE");    
   
        System.out.println();    
   
        // 计算一个中文汉字在各种编码下的字节数    
        System.out.println("中文汉字:" + ch);    
        EncodeTest.printByteLength(ch, "GB2312");    
        EncodeTest.printByteLength(ch, "GBK");    
        EncodeTest.printByteLength(ch, "GB18030");    
        EncodeTest.printByteLength(ch, "ISO-8859-1");    
        EncodeTest.printByteLength(ch, "UTF-8");    
        EncodeTest.printByteLength(ch, "UTF-16");    
        EncodeTest.printByteLength(ch, "UTF-16BE");    
        EncodeTest.printByteLength(ch, "UTF-16LE");    
    }    
}   

运行结果如下:

英文字母:A 
字节数:1;编码:GB2312 
字节数:1;编码:GBK 
字节数:1;编码:GB18030 
字节数:1;编码:ISO-8859-1 
字节数:1;编码:UTF-8 
字节数:4;编码:UTF-16 
字节数:2;编码:UTF-16BE 
字节数:2;编码:UTF-16LE 
中文汉字:人 
字节数:2;编码:GB2312 
字节数:2;编码:GBK 
字节数:2;编码:GB18030 
字节数:1;编码:ISO-8859-1 
字节数:3;编码:UTF-8 
字节数:4;编码:UTF-16 
字节数:2;编码:UTF-16BE 
字节数:2;编码:UTF-16LE 



字符截取例:

import java.io.UnsupportedEncodingException;       
      
public class CutString {       
    public static void main(String[] args) throws UnsupportedEncodingException {       
        String s = "我ZWR爱JAVA";       
        // 获取GBK编码下的字节数据       
        byte[] data = s.getBytes("GBK");       
        byte[] tmp = new byte[6];       
        // 将data数组的前六个字节拷贝到tmp数组中       
        System.arraycopy(data, 0, tmp, 0, 6);       
        // 将截取到的前六个字节以字符串形式输出到控制台       
        s = new String(tmp);       
        System.out.println(s);       
    }       
}  

输出结果:

我ZWR? 
例2:

import java.io.UnsupportedEncodingException;    
   
public class CutString {    
   
       
    public static boolean isChineseChar(char c)    
            throws UnsupportedEncodingException {    
        // 如果字节数大于1,是汉字    
        // 以这种方式区别英文字母和中文汉字并不是十分严谨,但在这个题目中,这样判断已经足够了    
        return String.valueOf(c).getBytes("GBK").length > 1;    
    }    
   
       
    public static String substring(String orignal, int count)    
            throws UnsupportedEncodingException {    
        // 原始字符不为null,也不是空字符串    
        if (orignal != null && !"".equals(orignal)) {    
            // 将原始字符串转换为GBK编码格式    
            orignal = new String(orignal.getBytes(), "GBK");    
            // 要截取的字节数大于0,且小于原始字符串的字节数    
            if (count > 0 && count < orignal.getBytes("GBK").length) {    
                StringBuffer buff = new StringBuffer();    
                char c;    
                for (int i = 0; i < count; i++) {    
                    // charAt(int index)也是按照字符来分解字符串的    
                    c = orignal.charAt(i);    
                    buff.append(c);    
                    if (CutString.isChineseChar(c)) {    
                        // 遇到中文汉字,截取字节总数减1    
                        --count;    
                    }    
                }    
                return buff.toString();    
            }    
        }    
        return orignal;    
    }    
   
    public static void main(String[] args) {    
        // 原始字符串    
        String s = "我ZWR爱JAVA";    
        System.out.println("原始字符串:" + s);    
        try {    
            System.out.println("截取前1位:" + CutString.substring(s, 1));    
            System.out.println("截取前2位:" + CutString.substring(s, 2));    
            System.out.println("截取前4位:" + CutString.substring(s, 4));    
            System.out.println("截取前6位:" + CutString.substring(s, 6));    
        } catch (UnsupportedEncodingException e) {    
            e.printStackTrace();    
        }    
    }    
}   


运行结果:

原始字符串:我ZWR爱JAVA 
截取前1位:我 
截取前2位:我 
截取前4位:我ZW 
截取前6位:我ZWR爱 


分享到:
评论

相关推荐

    java字符串的各种编码转换

    ### Java字符串的编码转换 在Java中,处理不同字符集之间的字符串转换是一项常见任务。尤其是在处理国际化应用时,理解并掌握各种字符编码格式变得尤为重要。下面将介绍几种常见的字符编码格式以及如何在Java中实现...

    java字符串编码转换

    ### Java字符串编码转换详解 #### 一、Java 字符串编码转换基础 在Java中,字符串的处理是非常常见的操作之一,而字符编码是确保数据正确显示的关键因素。本篇文章将重点介绍Java中字符串编码的转换方法及其在Web...

    Java 所有字符串转UTF-8 万能工具类-GetEncode.java

    不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);

    java获取字符串编码类型代码(导入直接查看结果)

    总的来说,Java中获取字符串编码类型没有一个直接的标准方法,开发者需要借助一些技巧和外部库来实现。在处理编码问题时,理解各种编码格式的特性以及它们之间的差异至关重要,这样才能有效地避免乱码问题,保证数据...

    JAVA 字符串应用笔记

    在Java编程语言中,字符串是极其重要且常用的数据类型,尤其在Android开发中更是不可或缺。字符串主要用于处理文本信息,如用户输入、文件内容、网络数据等。以下是对"JAVA 字符串应用笔记"中可能涉及的一些核心知识...

    java获取字符串编码类型代码

    通过解析字符串获取字符串编码类型的java代码

    java字符串编码获取

    要获取Java字符串的字节序列(即编码),可以使用`getBytes()`方法。此方法默认使用平台的默认编码,通常为UTF-8,但也可以指定其他编码,如`getBytes("GBK")`。如果需要确定字符串的原始编码,需要额外的信息,...

    java 字符串转16进制Ascii

    在Java编程语言中,将字符串转换为16进制ASCII值是一个常见的操作,尤其是在处理数据编码、网络通信或存储时。这个过程涉及到字符到数字的...理解这些概念和方法,对于在Java开发过程中处理字符串编码问题至关重要。

    java字符串编码转换代码

    总结了java中常见的utf-8、gbk等进行字符串编码转换

    Encodes.java字符串编码转换

    字符串与各种编码之间相互转换,例如:字符串转base64,字符串转十六进制等等

    将字符串从常用编码转为utf-8编码(java)

    Java字符串编码查询及转换,可将常用的一些编码格式转换成utf-8

    JAVA字符串操作类CTool.java字符转换类.rar

    JAVA字符串操作类CTool.java字符转换类,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。封装的功能:字符串从GBK编码转换为Unicode编码、对字符串进行md5...

    Base16 java字符串与十六进制互转 js字符串与十六进制互转

    这里我们将深入探讨“Base16”(也称为Hex)编码,以及Java和JavaScript中如何进行字符串与十六进制之间的转换。 Base16是一种简单的二进制到文本的编码方式,它将每个八位字节表示为两个十六进制数字。这种编码...

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

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

    使用json-lib将java对象转换成json字符串

    标题中的“使用json-lib将java对象转换成json字符串”指的是在Java编程中,利用json-lib这个库来将Java对象转化为JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端...

    java转换字符串编码格式的方法

    在Java中,字符编码转换...总之,了解和掌握Java中的字符串编码转换方法,对于开发跨平台的应用程序和处理多语言数据具有重要意义。通过恰当的编码转换机制,可以确保数据的正确显示和处理,避免乱码等常见的编码问题。

    java16进制与字符串的转换.pdf

    在 Java 中,我们可以使用 `encode` 函数将字符串编码为 16 进制字符串。该函数接受一个参数 str,即字符串,然后将其编码为 16 进制字符串。 ```java public static String encode(String str) { byte[] bytes=...

    java 字符串中文判断

    在Java编程语言中,处理字符串是非常常见的操作,尤其是在涉及到文本分析和处理的场景。本文将深入探讨如何在Java中进行中文...在Java中处理字符串,特别是涉及到特殊字符集如中文时,对字符编码的理解是必不可少的。

    java处理字符和字符串课件

    ### Java处理字符和字符串知识点详解 #### 一、概述 在Java编程中,字符和字符串是最常见的数据类型之一。为了方便高效地处理这些数据类型,Java提供了强大的支持,包括`Character`类和`String`类等。这些类位于`...

Global site tag (gtag.js) - Google Analytics