java字符编码方式总结

Java源文件命名,保存,字符编码方式 单语言(英文):ANSI或UTF-8(推荐UTF-8)。多语言或通用性:UTF-8。 阅读详情
java字符编码方式总结

一、概要
  在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要的转码。其次,由于各种服务器有不同的处理方式,还需要多做试验,确保使用中不出现乱码。
二、基本概念
2.1 JAVA中字符的表达
  JAVA中有char、byte、String这几个概念。char 指的是一个UNICODE字符,为16位的整数。byte 是字节,字符串在网络传输或存储前需要转换为byte数组。在从网络接收或从存储设备读取后需要将byte数组转换成String。String是字符串,可以看成是由char组成的数组。String 和 char 为内存形式,byte是网络传输或存储的序列化形式。
举例:
英
String ying = “英”;
char ying = ying.charAt(0);
String yingHex = Integer.toHexString(ying);
82 F1 
byte yingGBBytes = ying.getBytes(“GBK”);
GB编码的字节数值
D3 A2 
2.2 编码方式的简介
  String序列化成byte数组或反序列化时需要选择正确的编码方式。如果编码方式不正确,就会得到一些0x3F的值。常用的字符编码方式有ISO8859_1、GB2312、GBK、UTF-8/UTF-16/UTF-32。
ISO8859_1用来编码拉丁文,它由单字节(0-255)组成。
  GB2312、GBK用来编码简体中文,它有单字节和双字节混合组成。最高位为1的字节和下一个字节构成一个汉字,最高位为0的字节是ASCII码。
  UTF-8/UTF-16/UTF-32是国际标准UNICODE的编码方式。 用得最多的是UTF-8,主要是因为它在对拉丁文编码时节约空间。
UNICODE值 UTF-8编码
U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx 
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
三、J2SE中相关的函数
String str =”英”;
//取得GB2312编码的字节
byte[] bytesGB2312 = str.getBytes(“GB2312”); 
//取得平台缺省编码的字节(solaris为ISO8859_1,windows为GB2312)
byte[] bytesDefault = str.getBytes();
//用指定的编码将字节转换成字符串
String newStrGB = new String(bytesGB2312, “GB2312”);

//用平台缺省的编码将字节转换成字符串(solaris为ISO8859_1,windows为GB2312)
String newStrDefault = new String(bytesDefault);
//用指定的编码从字节流里面读取字符
InputStream in = xxx;
InputStreamReader reader = InputStreamReader( in, “GB2312”);
char aChar = reader.read();
四、JSP、数据库的编码
4.1 JSP中的编码
(1) 静态声明:
CHARSET有两个作用:
JSP文件的编码方式:在读取JSP文件、生成JAVA类时,源JSP文件中汉字的编码
JSP输出流的编码方式:在执行JSP时,往response流里面写入数据的编码方式
(2) 动态改变:在往response流里面写数据前可以调用response.setContentType(),设定正确的编码类型。
(3) 在TOMCAT中,由Request.getParameter() 得到的参数,编码方式都是ISO8859_1。所以如果在浏览器输入框内输入一个汉字“英”,在服务器端就得到一个ISO8859_1编码的(0x00,0xD3,0x00,0xA2)。所以通常在接收参数时转码:
String wrongStr = response.getParameter(“name”);
String correctStr = new String(wrongStr.getBytes(“ISO8859_1”),”GB2312”);
在最新的SERVLET规范里面,也可以在获取参数之前执行如下代码:
request.setCharacterEncoding(“GB2312”);
4.2 数据库的编码
(1) 数据库使用UTF-16
如果String中是UNICODE字符,写入读出时不需要转码
(2) 数据库使用ISO8859_1
如果String中是UNICODE字符,写入读出时需要转码
写入:String newStr = new String(oldStr.getByte(“GB2312”), “ISO8859_1”);
读出:String newStr = new String(oldStr.getByte(“ISO8859_1”),”GB2312”);
五、源文件的编码
5.1 资源文件
资源文件的编码方式和编辑平台相关。在WINDOWS平台下编写的资源文件,以GB2312方式编码。在编译时需要转码,以确保在各个平台上的正确性:
native2ascii –encoding GB2312 source.properties
这样从资源文件中读出的就是正确的UNICODE字符串。
5.2 源文件
源文件的编码方式和编辑平台相关。在WINDOWS平台下开发的源文件,以GB2312方式编码。在编译的时候,需要指定源文件的编码方式:
javac –encoding GB2312
JAVA编译后生成的字节文件的编码为UTF-8。


①最新版TOMCAT4.1.18支持request.setCharacterEncoding(String enc)
②资源文件转码成company.name=\u82f1\u65af\u514b
③如果数据库使用utf-16则不需要这部分转码
④页面上应有
转码ⅰ:
String s = new String
(request.getParameter(“name”).getBytes(“ISO8859_1”),”GB2312”);
转码ⅱ:
String s = new String(name.getBytes(“GB2312”),”ISO8859_1”);
转码ⅲ:
String s = new String(name.getBytes(“ISO8859_1”),” GB2312”);
一、关键技术点:
1、当前流行的字符编码格式有:US-ASCII、ISO-8859-1、UTF-8、UTF-16BE、UTF-16LE、UTF-16、GBK、GB2312等,其中GBK、GB2312是专门处理中文编码的。
2、String的getBytes方法用于按指定编码获取字符串的字节数组,参数指定了解码格式,如果没有指定解码格式,则按系统默认编码格式。
3、String的“String(bytes[] bs, String charset)”构造方法用于把字节数组按指定的格式组合成一个字符串对象


二、实例演示: 


package book.String;
import java.io.UnsupportedEncodingException;
/** *//**
* 转换字符串的编码
* @author joe
*
*/
public class ChangeCharset ...{
/** *//** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块    */
public static final String US_ASCII = "US-ASCII";
/** *//** ISO拉丁字母表 No.1,也叫做ISO-LATIN-1     */
public static final String ISO_8859_1 = "ISO-8859-1";
/** *//** 8 位 UCS 转换格式     */
public static final String UTF_8 = "UTF-8";
/** *//** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序     */
public static final String UTF_16BE = "UTF-16BE";
/** *//** 16 位 UCS 转换格式,Litter Endian(最高地址存放地位字节)字节顺序     */
public static final String UTF_16LE = "UTF-16LE";
/** *//** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识     */
public static final String UTF_16 = "UTF-16";
/** *//** 中文超大字符集     **/
public static final String GBK = "GBK";

public static final String GB2312 = "GB2312";

/** *//** 将字符编码转换成US-ASCII码     */
public String toASCII(String str) throws UnsupportedEncodingException ...{
       return this.changeCharset(str, US_ASCII);
}

/** *//** 将字符编码转换成ISO-8859-1     */
public String toISO_8859_1(String str) throws UnsupportedEncodingException ...{
       return this.changeCharset(str, ISO_8859_1);
}

/** *//** 将字符编码转换成UTF-8     */
public String toUTF_8(String str) throws UnsupportedEncodingException ...{
       return this.changeCharset(str, UTF_8);
}

/** *//** 将字符编码转换成UTF-16BE     */
public String toUTF_16BE(String str) throws UnsupportedEncodingException...{
       return this.changeCharset(str, UTF_16BE);
}

/** *//** 将字符编码转换成UTF-16LE     */
public String toUTF_16LE(String str) throws UnsupportedEncodingException ...{
       return this.changeCharset(str, UTF_16LE);
}

/** *//** 将字符编码转换成UTF-16     */
public String toUTF_16(String str) throws UnsupportedEncodingException ...{
       return this.changeCharset(str, UTF_16);
}

/** *//** 将字符编码转换成GBK     */
public String toGBK(String str) throws UnsupportedEncodingException ...{
       return this.changeCharset(str, GBK);
}

/** *//** 将字符编码转换成GB2312     */
public String toGB2312(String str) throws UnsupportedEncodingException ...{
       return this.changeCharset(str,GB2312);
}

/** *//**
    * 字符串编码转换的实现方法
    * @param str 待转换的字符串
    * @param newCharset 目标编码
    */
public String changeCharset(String str, String newCharset) throws UnsupportedEncodingException ...{
       if(str != null) ...{
         //用默认字符编码解码字符串。与系统相关,中文windows默认为GB2312
         byte[] bs = str.getBytes();
         return new String(bs, newCharset); //用新的字符编码生成字符串
       }
       return null;
}

/** *//**
    * 字符串编码转换的实现方法
    * @param str 待转换的字符串
    * @param oldCharset 源字符集
    * @param newCharset 目标字符集
    */
public String changeCharset(String str, String oldCharset, String newCharset) throws UnsupportedEncodingException ...{
       if(str != null) ...{
         //用源字符编码解码字符串
         byte[] bs = str.getBytes(oldCharset);
         return new String(bs, newCharset);
       }
       return null;
}

public static void main(String[] args) throws UnsupportedEncodingException ...{
       ChangeCharset test = new ChangeCharset();
       String str = "This is a 中文的 String!";
       System.out.println("str:" + str);
      
       String gbk = test.toGBK(str);
       System.out.println("转换成GBK码:" + gbk);
       System.out.println();
      
       String ascii = test.toASCII(str);
       System.out.println("转换成US-ASCII:" + ascii);
       System.out.println();
      
       String iso88591 = test.toISO_8859_1(str);
       System.out.println("转换成ISO-8859-1码:" + iso88591);
       System.out.println();
      
       gbk = test.changeCharset(iso88591, ISO_8859_1, GBK);
       System.out.println("再把ISO-8859-1码的字符串转换成GBK码:" + gbk);
       System.out.println();
      
       String utf8 = test.toUTF_8(str);
       System.out.println();
       System.out.println("转换成UTF-8码:" + utf8);
       String utf16be = test.toUTF_16BE(str);
       System.out.println("转换成UTF-16BE码:" + utf16be);
       gbk = test.changeCharset(utf16be, UTF_16BE, GBK);
       System.out.println("再把UTF-16BE编码的字符转换成GBK码:" + gbk);
       System.out.println();
      
       String utf16le = test.toUTF_16LE(str);
       System.out.println("转换成UTF-16LE码:" + utf16le);
       gbk = test.changeCharset(utf16le, UTF_16LE, GBK);
       System.out.println("再把UTF-16LE编码的字符串转换成GBK码:" + gbk);
       System.out.println();
      
       String utf16 = test.toUTF_16(str);
       System.out.println("转换成UTF-16码:" + utf16);
       String gb2312 = test.changeCharset(utf16, UTF_16, GB2312);
       System.out.println("再把UTF-16编码的字符串转换成GB2312码:" + gb2312);
}
} 
文章出处:http://www.diybl.com/course/3_program/java/javaxl/20071126/87571.html


Java中使用指定的字符编码方式读取字符流 在Java中,我们经常需要读取字符流,并且有时候需要使用特定的字符编码方式来解析字符数据。在本文中,我将介绍如何使用指定的字符编码方式来读取字符流,并提供相应的源代码示例。需要注意的是,在示例代码中,我们使用了Java 7引入的try-with-resources语句,这样可以确保在处理完字符流后,相关的资源会被自动关闭,无需手动关闭流。在处理字符流时,记得使用适当的异常处理机制来处理潜在的异常情况。在Java中,使用指定的字符编码方式读取字符流是一项常见的任务。在上面的示例中,我们使用了。 阅读详情

相关推荐

多思计算机组成原理实验:模型机课程设计

计算机组成原理实验教程 基于多思网络虚拟实验系统 张雯雰

Nick的博客 2万+

java中的字符编码简介

计算机常见编码 一、有关编码的基础知识 1、计算机存储的容量 位(比特) bit 最小的单元 字节 byte 机器语言的单位(计算机存储设备容量的最基本单位) 1byte = 8bits 8个二进制位为1个字节 1KB = 1024byte 1MB = 1024KB 1GB = 1024MB ...

小仙儿 3475

在 Mac OS 上编译 WebRTC 教程

在 Mac OS 上编译 WebRTC 教程

iShare_Carlos的博客 1249

Java-字符编码-StandardCharsets类

Java-字符编码-StandardCharsets类

深度安全实验室 2334

如何利用Arcgis进行地统计学分析(三):空间插值方法选择与优化

本文深入探讨了在Arcgis中进行地统计学分析时,如何根据探索性数据分析(EDA)结果科学选择与优化空间插值方法。文章对比了IDW、RBF、克里金等主流方法的适用场景与核心参数,并通过实战案例详解了从数据诊断到模型调优的完整流程,强调结合半变异函数与趋势分析进行“对症下药”,以提升插值结果的精度与可靠性。

weixin_29281915的博客 120

玩转 Milvus(二):在 Ubuntu 22.04(WSL2)上安装 Milvus

本文详细介绍了在Ubuntu 22.04(WSL2)环境下安装Milvus向量数据库的两种单机模式:Milvus Lite和Milvus Standalone。Milvus Lite作为轻量级Python库,适合快速学习和小规模实验,只需通过pip安装即可使用。Milvus Standalone则支持Docker和Docker Compose两种部署方式,适合开发测试或小规模生产环境。文章对比了不同安装方式的优缺点,并提供了验证案例和常见问题解答,帮助开发者快速上手,实现简单的语义搜索功能。

企业级后端与 AI 应用开发双线探索 2507

Java字符编码

什么是编码与解码 计算机的底层只能存0和1,如果是日常生活中遇到的数字比如:127,这个可以通过十进制和二进制的转换从而让计算机存储01111111。 如果计算机存储类似于汉字、英文字符、符号字符等内容,是如何存储的呢? 根据上图的解释说明,计算器提供了很多的编码表记录了字符和数字的一一对应关系,编码就是把字符对应编码表中的码值存储在电脑中,而解码则是把码值在编码表中的对应字符展现出来。 常见编码表 编码代号 编码说明 ASCII 美国标准信息交换表。基于拉丁字母的字符编码,共收录了12

csp732171109的博客 391

windows局域网文件夹共享

windows局域网共享文件夹,亲测,包括可能出现的一些问题解决

yml15180824993的博客 4万+

java字符编码总结

本文介绍了计算机字符集和字符编码的历史演进。以及java中使用utf-16作为编码的介绍

赶路人儿 7277

python 写一个简单的 telegram bot (电报机器人)

replit.com 环境配置太恶心了,只能使用 poetry.poetry 这个名字是挺好听,用起来也是很垃圾,太恶心。heroku.com 注册登录不方便,需要各种验证。所以,部署的问题,目前搁置。

waterHBO的博客 3197

SAP SD模块定价过程后台配置简介

只有手工输入定价时(例如,在定价中的定价浏览屏幕中),或者只有从外部处理转移这些定价时(例如,成本核算),才将这些定价包括在确定(价格确定、输出确定,批次确定)之中。定价过程的定义和分配是SD模块中最核心的配置,包含了条件表、条件类型、存取顺序、发票类型、客户定价过程等,确定了销售订单已什么价格销售、税率、附加折扣等多个条件行程有一个定价过程。12、小计:记录该条件类型在VBAP表中是否存储,以及其后续用途,如记入信贷,占用信贷额度,记入成本等,如果需要金额暂用信贷额度的话,在小计这里选择A即可。

我小时候很黑的博客 3783

【Java】知识——各类编码格式以及样例

ASCII 字符集:常规的字符集,表示英文以及部分符号。Unicode 字符集:表示世界上所有字符,统一的字符集。GB2312 字符集:适配汉字,ASCII 字符集的中文拓展字符集。CP936 字符集:GBK 编码方式使用的字符集,GB2312 的拓展表。GB18030 字符集:GB2312 的拓展表,包含全部汉字。#编码方式 :UTF-8 编码方式:是一种对 Unicode 字符集的编码方式,字符由不定字节长度表示。

子规入梧桐 2826

杰理AC696N系列芯片外部中断使用教程

本教程详细介绍了杰理AC696N芯片的GPIO引脚中断唤醒功能实现方法。主要内容包括: 功能特点: 支持任意GPIO引脚配置为中断源 可灵活选择上升沿或下降沿触发 提供自定义中断回调函数接口 核心实现: 通过port_wkup_interrupt_init()函数配置GPIO属性 使用request_irq()注册中断服务程序 提供中断使能/关闭接口 注意事项: 此功能在低功耗模式下无效 需注意引脚冲突和中断优先级设置 建议在回调函数中实现简洁的逻辑 应用场景: 按键检测 外部信号监测 事件触发等 本方案提

qq_42014563的博客 944

java字符编码方式_java字符编码方式总结

java字符编码方式总结一、概要在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要的转码。其次,由于各种服务器有不同的处理方式,还需要多做试验,确保使用中不出现乱码。二、基本概念2.1 JAVA中字符的表达JAVA中有char、byte、String这几个概念。char 指的是一个...

weixin_34855166的博客 2899

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java中的字符编码方式

https://www.cnblogs.com/liujinhong/p/5995946.html

qq_41504815的博客 233

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java字符编码方式_java字符编码方式总结教程

一、概要在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要的转码。其次,由于各种服务器有不同的处理方式,还需要多做试验,确保使用中不出现乱码。二、基本概念2.1 JAVA中字符的表达JAVA中有char、byte、String这几个概念。char 指的是一个UNICODE字符,为1...

weixin_28840143的博客 582

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java中的字符编码方式

from https://www.cnblogs.com/liujinhong/p/5995946.html 1. 问题由来 面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下。 2. 几种字符编码的方式 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256...

zymx(u010820135)的专栏 4322

java 设置字符编码_java中的字符编码方式

1. 问题由来面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下。2. 几种字符编码的方式1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个...

weixin_39603622的博客 3642

java 字符编码方式

java字符编码方式总结    一、概要    在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要的转码。其次,由于各种服务器有不同的处理方式,还需要多做试验,确保使用中不出现乱码。  二、基本概念  2.1 JAVA中字符的表达    JAVA中有char、byte、String

puppet_的博客 851

java中的字符编码_java中的字符编码方式

1. 问题由来面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下。2. 几种字符编码的方式1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个...

weixin_39901332的博客 620

java ascii 编码方式_JAVA 的ASCII字符编码一览表

JAVA 的ASCII字符编码一览表二进制 十进制 十六进制 缩写 可以显示的表示法 名称/意义0000 0000 0 00 NUL ␀ 空字符(Null)0000 0001 1 01 SOH ␁ 标题开始0000 0010 2 02 STX ␂ 本文开始0000 0011 3 03 ETX ␃ 本文结束0000 0100 4 04 EOT ␄ 传输结束0000 0101 5 05 ENQ ␅ 请...

weixin_35379520的博客 738

java 获取系统字符编码,文件字符编码,jvm虚拟机字符编码 方式示例。

System.out.println("获取Java虚拟机默认的字符编码:" +jvmEncode);System.out.println("获取文件系统默认的字符编码:" +fileEncode);System.out.println("获取操作系统默认的字符编码:" +optEncode);//获取Java虚拟机默认的字符编码。//获取操作系统默认的字符编码。//获取文件系统默认的字符编码。

u011308187的博客 497

Java中不同字符编码方式的不同存储机制

Java中不同字符编码方式的不同存储机制

m0_37258559的博客 292

Java 编码的字符串_java中的字符编码方式

1. 问题由来面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下。2. 几种字符编码的方式1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个...

weixin_39678451的博客 254
上一篇: Java如何获得文件编码格式
下一篇: js文本加密及解密器
clbxp
博客等级 码龄21年 35粉丝 56原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值