- 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
相关推荐
HomeAssistant+HACS实战:5分钟搞定米家设备接入(附HomeKit配置技巧)
本文详细介绍了如何通过HomeAssistant和HACS插件商店快速接入米家设备,并分享HomeKit配置技巧。从HACS安装到米家设备接入,再到HomeKit设备集成,提供一站式智能家居解决方案,帮助用户实现设备统一管理和自动化场景设置。
【Java】知识——各类编码格式以及样例
ASCII 字符集:常规的字符集,表示英文以及部分符号。Unicode 字符集:表示世界上所有字符,统一的字符集。GB2312 字符集:适配汉字,ASCII 字符集的中文拓展字符集。CP936 字符集:GBK 编码方式使用的字符集,GB2312 的拓展表。GB18030 字符集:GB2312 的拓展表,包含全部汉字。#编码方式 :UTF-8 编码方式:是一种对 Unicode 字符集的编码方式,字符由不定字节长度表示。
机器人关节电机发热难题:从工程化角度拆解热管理解决方案(下)
摘要:本文系统分析了机器人关节电机与驱动系统的热管理方案,重点解决局部热点问题。针对不同功率场景提出了热管/均热板散热(适用于中小功率)和液冷散热(适用于高功率)的具体实施方案,详细比较了结构参数、材料选择、安装工艺和散热效果。特别强调了电机-驱动协同热管理的重要性,提出"工况联动+热路径共享"的核心理念,包括一体化散热结构设计和动态控制策略。最后介绍了热仿真与测试验证方法,确保方案的有效落地。通过系统级热管理,可显著降低温升(热点区域降温30-60℃),同时优化体积和能耗。
java文件编码
ASCII编码,8bit(一个字节),能表示的最大的整数就是255(2^8-1=255),由于ASCII 的编码最高位总是 0,所以只定义了128 个字符,用0 - 127用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。而且最广泛的就是常用的UTF-8。UTF-8,Unicode Transformation Format,可变长度编码,通常使用1~4字节为每个字符编码,兼容ASCII编码,这是一种Unicode的一种转换格式。
【随机过程】 3 - 随机过程的频域分析1 - 功率谱
随机过程的频域分析 文章目录随机过程的频域分析1. 什么是谱2. 确定信号的频谱2.1 周期信号的频谱2.2 非周期信号的频谱3. 随机信号的谱3.1 随机信号做傅里叶分析的困难3.2 功率谱密度的物理和数学表示形式3.2.1 功率谱密度的物理表示3.2.2 功率谱密度的数学表示3.3 功率谱密度的解读3.3.1 量纲分析3.3.2 谱3.3.3 密度3.3.4 wiener和khinchin3.4 功率谱密度的性质3.4.1 非线性3.4.2 偶函数3.5 wiener-khinchin关系的应用3.6
LightGBM处理类别特征和缺失值有多省心?一个真实业务数据案例带你上手
本文通过真实电商数据案例,详细解析了LightGBM如何高效处理类别特征和缺失值。相比传统方法,LightGBM仅需一行代码即可自动处理高基数类别特征和缺失值,大幅提升模型训练效率和预测准确度,特别适合业务场景中的脏数据处理。
Java的编码方式、单个char类型存储大部分中文字符、getBytes()、new String()的转换流程
char存储中文,getBytes()、UTF-8、UTF-16、UTF-32、GBK、ASCII、ISO8859-1、Unicode
OpenClaw 安装失败:npm install 多次报错的完整排错与解决方案
这次问题的最终解决,其实并不复杂,但关键在于思路的转变:从“脚本怎么又失败了”,切换为“npm 在这一层到底失败在哪里”。当我们手动复现安装过程、打开 verbose 日志、直面真实错误栈时,问题就不再是模糊的“安装不了”,而是一个可以被定位、被验证、被修复的具体工程问题。
java编码格式
------- android培训、java培训、期待与您交流! ---------- 一、编码格式 1、ASC码表:美国信息标准交换码(这是最初的一个表,其中的字母用各种各样的数字进行代替)。 2、GB2312:中国汉字的编码表(里面收录了几千个中国常用汉字和字符)。 3、GBK:GB2312的扩容版(里面收录了两万多的中国汉字,因为中国汉字博大精深)。 4、18030表:相当于
12、知识图谱数据处理与推理全解析
本文深入解析了知识图谱中的数据处理与推理技术,涵盖SHACL的多种约束类型(如值约束、范围约束、字符串约束、逻辑约束等)及其在数据质量控制中的应用,并介绍了常用的SHACL工具与实际案例。文章对比了SPARQL与SHACL的特点,探讨了RDF(S)的局限性,引出表达能力更强的OWL和OWL2语言及其在语义网和生物医学等领域的应用。此外,还阐述了规则在知识表示中的作用,包括产生式规则和Datalog规则,并总结了知识图谱中推理的重要性与典型流程,为构建高质量、可推理的知识图谱提供了全面的技术指导。
视觉Transformer实战 | Token-to-Token Vision Transformer(T2T-ViT)详解与实现
Vision Transformer (ViT) 在计算机视觉领域取得了巨大成功,但标准的 ViT 存在一些局限性,如需要大规模预训练数据、对局部结构建模不足等。Token-to-Token ViT (T2T-ViT) 通过引入渐进式分词过程改进了原始 ViT,使其能够在中小型数据集上取得更好的性能。本节将详细介绍 T2T-ViT 的技术原理,并使用 PyTorch 从零开始实现 T2T-ViT。
java字符编码方式_java字符编码方式总结
java字符编码方式总结一、概要在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要的转码。其次,由于各种服务器有不同的处理方式,还需要多做试验,确保使用中不出现乱码。二、基本概念2.1 JAVA中字符的表达JAVA中有char、byte、String这几个概念。char 指的是一个...
Tessent ATPG Flow 流程 (代码和注释)
**摘要:Tessent ATPG流程分为五个阶段:1) 环境初始化(加载设计文件、库和扫描链配置);2) DRC规则检查(验证设计可测试性并修复违例);3) ATPG向量生成(设置故障模型并运行引擎优化覆盖率);4) 向量验证与后处理(仿真验证并生成ATE格式文件);5) 进阶操作(多电压域和存储器测试)。流程输出包括测试向量、覆盖率报告和验证日志,支持stuck-at和transition故障模型,使用Tcl脚本控制。关键步骤包含扫描链配置、EDT压缩和覆盖率优化。
java字符编码方式总结
一、概要 在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要的转码。其次,由于各种服务器有不同的处理方式,还需要多做试验,确保使用中不出现乱码。 二、基本概念 2.1 JAVA中字符的表达 JAVA中有char、byte、String这几个概念。char 指的是一个UN
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
Java中的字符编码方式
https://www.cnblogs.com/liujinhong/p/5995946.html
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
java字符编码方式_java字符编码方式总结教程
一、概要在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要的转码。其次,由于各种服务器有不同的处理方式,还需要多做试验,确保使用中不出现乱码。二、基本概念2.1 JAVA中字符的表达JAVA中有char、byte、String这几个概念。char 指的是一个UNICODE字符,为1...
java中的字符编码方式
from https://www.cnblogs.com/liujinhong/p/5995946.html 1. 问题由来 面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下。 2. 几种字符编码的方式 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256...
java 设置字符编码_java中的字符编码方式
1. 问题由来面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下。2. 几种字符编码的方式1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个...
java中的字符编码_java中的字符编码方式
1. 问题由来面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下。2. 几种字符编码的方式1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个...
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 ␅ 请...
java 获取系统字符编码,文件字符编码,jvm虚拟机字符编码 方式示例。
System.out.println("获取Java虚拟机默认的字符编码:" +jvmEncode);System.out.println("获取文件系统默认的字符编码:" +fileEncode);System.out.println("获取操作系统默认的字符编码:" +optEncode);//获取Java虚拟机默认的字符编码。//获取操作系统默认的字符编码。//获取文件系统默认的字符编码。
Java中不同字符编码方式的不同存储机制
Java中不同字符编码方式的不同存储机制
Java 编码的字符串_java中的字符编码方式
1. 问题由来面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下。2. 几种字符编码的方式1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个...
【Java学习笔记(一百一十五)】之 文件,文本输入输出流,字符编码方式
本文章由公号【开发小鸽】发布!欢迎关注!!! 老规矩–妹妹镇楼: 一. 输入与输出 (一) 输入流 / 输出流 从其中读入一个字节序列的对象称为输入流,而可以向其中写入一个字节序列的对象称为输出流。这些字节序列的来源可以是文件,网络连接和内存块。抽象类InputStream和OutputStream构成了IO类层次结构的基础,但是面向字节的流无法处理Unicode形式的信息(每个Unicode字符使用了多个字节表示),所以从抽象类Reader
1050



被折叠的 条评论
为什么被折叠?



