网站服务器到期为什么要网站备案网页类型分类7种
- 作者: 五速梦信息网
- 时间: 2026年04月20日 08:10
当前位置: 首页 > news >正文
网站服务器到期为什么要网站备案,网页类型分类7种,织梦做的网站老是被黑,昆明网站建设制作1、理解字符#xff0c;int#xff0c;字节以及二进制存储
#xff08;1#xff09;、字符
字符是文本的基本单位#xff0c;例如字母#xff08;A, B, C#xff09;、数字#xff08;1, 2, 3#xff09;、标点符号#xff08;!, ?, ,#xff09;以及其他符号int字节以及二进制存储
1、字符
字符是文本的基本单位例如字母A, B, C、数字1, 2, 3、标点符号!, ?, ,以及其他符号如特殊符号等。
编码表示 在计算机中字符通过编码标准如ASCII、Unicode映射为特定的数值称为“码点”或“代码点”。 例如
A’的ASCII码点是65ASCII或U0041Unicode。你’的Unicode码点是U4F60Unicode。
存储与处理 字符为字符串的一部分但也可以单独处理。例如在Java中字符用char类型表示每个char占用2字节UTF-16编码。
示例
char ch A; // A的Unicode码点是U0041
System.out.println((int) ch); // 输出652、基本数据类型int
int是Java中的一种基本数据类型用于表示整数。它占用4字节32 位可以表示的范围是从-2,147,483,648到2,147,483,647。
用途 int类型常用于数值计算、索引数组、计数等场景。它可以存储较大的整数值适合大多数常见的数值运算。
示例
char ch A;
int codePoint (int) ch; // 将字符A转换为其Unicode码点65
System.out.println(codePoint); // 输出653、字节Byte
字节byte是计算机中最小的可寻址数据单位通常由8位bit组成。一个字节可以表示的范围是从0到255无符号或从-128到127有符号。
用途 字节广泛用于文件读写、网络传输、内存操作等场景。它是计算机中最基本的数据存储单元。
示例
byte b 65; // 字节值65
System.out.println(b); // 输出65字节与字符的关系 字符在计算机中最终以字节形式存储。不同编码方式如UTF-8、UTF-16决定了如何将字符映射为字节序列。 例如
A’在UTF-8中表示单个字节65在UTF-16中会开辟两个字节存储。你’在UTF-8中表示为三个字节E4 BD A0。
示例
String str 你好;
byte[] utf8Bytes str.getBytes(java.nio.charset.StandardCharsets.UTF_8);
for (byte b : utf8Bytes) {System.out.printf(%02X , b); // 输出十六进制展示 E4 BD A0 E5 A5 BD
}4、计算机中的二进制数据
二进制数据是计算机内部表示信息的基本方式所有数据最终都以二进制形式存储和处理。二进制数据由一系列的位bit组成每个位可以是0或1。
数据类型与二进制表示 不同的数据类型在计算机中以不同的方式存储为二进制数据。
字符通过编码标准如UTF-8、UTF-16转换为字节序列每个字节由8位组成。整数直接存储为二进制形式。例如整数65在二进制中表示为00000000 00000000 00000000 0100000132位因为一个int占用4个字节存储。
示例
int number 65;
System.out.println(Integer.toBinaryString(number)); // 输出1000001示例1字符与二进制数据 假设我们有一个字符’A’其Unicode码点是65。我们可以将其转换为二进制形式。
char ch A;
int codePoint (int) ch; // 获取 Unicode 码点
String binaryString Integer.toBinaryString(codePoint);
System.out.println(Binary representation of A: binaryString); // 输出1000001示例2整数与二进制数据 假设我们有一个整数65我们可以查看其二进制表示。
int number 65;
String binaryString Integer.toBinaryString(number);
System.out.println(Binary representation of 65: binaryString); // 输出 10000015、总结
字符是文本的基本单位通过编码标准如ASCII、Unicode映射为特定的数值码点。字符在计算机中通常存储为字符串的一部分但也可以单独处理。int是一种基本数据类型用于表示整数占用4字节32位适用于数值计算、索引数组等场景。字符可以通过强制转换为int来获取其对应的Unicode码点。字节是计算机中最小的可寻址数据单位由8位组成。字符在计算机中最终以字节形式存储不同编码方式决定了如何将字符映射为字节序列。二进制数据是计算机内部表示信息的基本方式所有数据最终都以二进制形式存储和处理。不同数据类型在计算机中以不同的方式存储为二进制数据。
2、ASCII和Unicode
ASCII和Unicode是两种字符集编码标准它们在设计目的、字符集范围和应用场合上有显著的区别。
1、ASCII (American Standard Code for Information Interchange)
1、定义与用途
ASCII是一种早期的字符编码标准主要用于表示英文字母、数字和一些常见的符号。
用途它广泛应用于早期的计算机系统中特别是在美国和英语国家。范围ASCII定义了128个字符从0到127每个字符用一个字节8位中的低7位表示最高位通常为0。
2、字符集
基本字符
控制字符如换行(LF, U000A)、回车(CR, U000D)等不可见字符。可打印字符包括大写和小写字母A-Z, a-z、数字0-9、标点符号和其他常见符号如 !, , , $, % 等。
3、编码方式
固定长度编码每个字符占用1字节8位但只使用了低7位因此实际上只用了7位最高位为0。 示例
A’的ASCII编码是41十六进制或01000001二进制。!的ASCII编码是21十六进制或00100001二进制。
完整ASCII码表
2、Unicode
1、定义与用途
Unicode是一个全球通用的字符集标准旨在为世界上几乎所有的书写系统中的每个字符分配一个唯一的编号称为“码点”或“代码点”。
用途Unicode被设计用来解决不同语言和地区之间的字符编码问题支持几乎所有现代语言以及许多历史上的语言和符号。范围Unicode包含超过140,000个字符覆盖了从基本拉丁字母到复杂的象形文字等各种字符。
2、字符集
基本多文种平面BMP包含最常见的字符范围从U0000到UFFFF涵盖了大多数常用字符。补充平面用于表示超出BMP的字符范围从U10000到U10FFFF包括表情符号、古代文字等。
3、编码方式
变长编码Unicode本身并不是一种具体的编码格式而是通过UTF-8、UTF-16等具体编码格式来实现。
UTF-8变长编码兼容ASCII。对于单字节字符如英文字符UTF-8使用1字节对于多字节字符如中文字符UTF-8可能使用2到4字节。UTF-16变长编码主要使用2字节表示BMP中的字符对于超出BMP的字符使用4字节代理对。
3、主要区别 4、示例对比
1、ASCII字符
假设我们有一个简单的ASCII字符串Hello!。 ASCII编码结果 ‘H’ - 48十六进制或01001000二进制 ‘e’ - 65十六进制或01100101二进制 ‘l’ - 6C十六进制或01101100二进制 ‘o’ - 6F十六进制或01101111二进制 ‘!’ - 21十六进制或00100001二进制
2、Unicode字符
假设我们有一个包含中文字符的字符串你好。
Unicode码点 ‘你’ - U4F60 ‘好’ - U597D
UTF-8编码 ‘你’ - E4 BD A0三字节 ‘好’ - E5 A5 BD三字节
UTF-16编码 ‘你’ - 4F60两字节 ‘好’ - 597D两字节
5、Java示例
1、ASCII字符编码
public class AsciiExample {public static void main(String[] args) {String originalString Hello!;// 使用 ASCII 编码将字符串转换为字节数组byte[] asciiBytes originalString.getBytes(java.nio.charset.StandardCharsets.US_ASCII);System.out.println(Encoded with ASCII:);for (byte b : asciiBytes) {System.out.printf(%02X , b);}}
}输出示例
Encoded with ASCII:
48 65 6C 6C 6F 21 2、Unicode字符编码
import java.nio.charset.StandardCharsets;public class UnicodeExample {public static void main(String[] args) {String originalString 你好;// 使用 UTF-8 编码将字符串转换为字节数组byte[] utf8Bytes originalString.getBytes(StandardCharsets.UTF_8);System.out.println(Encoded with UTF-8:);printByteArray(utf8Bytes);// 使用 UTF-16 编码将字符串转换为字节数组byte[] utf16Bytes originalString.getBytes(StandardCharsets.UTF_16);System.out.println(Encoded with UTF-16:);printByteArray(utf16Bytes);}private static void printByteArray(byte[] bytes) {for (byte b : bytes) {System.out.printf(%02X , b);}System.out.println();}
}输出示例
Encoded with UTF-8:
E4 BD A0 E5 A5 BD
Encoded with UTF-16:
FE FF 4F 60 59 7D 6、ASCII和Unicode总结
ASCII是一种早期的字符编码标准仅支持128个字符主要用于表示英文字母、数字和一些常见的符号。它的优点是简单且高效但只能处理有限的字符集。Unicode是一个全球通用的字符集标准旨在为世界上几乎所有的书写系统中的每个字符分配一个唯一的编号。它通过UTF-8、UTF-16等具体编码格式实现能够支持多种语言和符号适用于现代计算机系统中的多语言文本处理。 通过理解这些区别你可以根据实际需求选择合适的字符编码方式。对于纯英文文本ASCII或UTF-8都是非常高效的选择而对于多语言文本UTF-8或UTF-16更加适合。
3、UTF-8、UTF-16和Base64
UTF-8和UTF-16是Unicode字符集的具体编码实现用于将Unicode码点转换为字节序列以便在计算机系统中存储和传输。 Base64是一种二进制到文本的编码方法主要用于将任意二进制数据转换为ASCII字符串格式。
1、UTF-8编码
UTF-8是一种变长编码格式兼容ASCII。可以根据字符的不同范围使用不同数量的字节来表示Unicode码点。UTF-8可以使用1到4字节来表示不同的字符。
变长编码理解下 如UTF-8是一种变长编码格式这意味着它可以根据字符的不同范围使用不同数量的字节来表示Unicode码点。 固定长度的编码格式 与变长编码相对应的是固定长度的编码格式这些编码方式对每个字符使用相同数量的字节进行表示。常见的固定长度编码方式有ASCII编码、UTF-32等。UTF-32每个字符占用4字节能够表示所有Unicode码点但占用更多存储空间ASCII每个字符占用1字节仅支持128个字符主要用于英语和西欧语言。 对比
具体规则 单字节字符ASCII字符
范围U0000到U007F示例‘A’ (U0041)在UTF-8中表示为411字节
双字节字符
范围U0080到U07FF示例‘é’ (U00E9)在UTF-8中表示为C3 A92字节
三字节字符
范围U0800到UFFFF示例‘你’ (U4F60)在UTF-8中表示为E4 BD A03字节
四字节字符
范围U10000到U10FFFF示例表情符号(U1F60A)在UTF-8中表示为F0 9F 98 8A4字节
示例代码
import java.nio.charset.StandardCharsets;public class Utf8Example {public static void main(String[] args) {// 字符 你String bmpStr 你;byte[] utf8BytesBmp bmpStr.getBytes(StandardCharsets.UTF_8);System.out.println(BMP character: bmpStr);System.out.print(UTF-8 encoding (hex): );for (byte b : utf8BytesBmp) {System.out.printf(%02X , b);}System.out.println();// 补充平面字符 String emojiStr ;byte[] utf8BytesEmoji emojiStr.getBytes(StandardCharsets.UTF_8);System.out.println(Supplementary character: emojiStr);System.out.print(UTF-8 encoding (hex): );for (byte b : utf8BytesEmoji) {System.out.printf(%02X , b);}System.out.println();}
}输出示例
BMP character: 你
UTF-8 encoding (hex): E4 BD A0
Supplementary character:
UTF-8 encoding (hex): F0 9F 98 8A 2、UTF-16编码
UTF-16是一种变长编码格式主要用于将Unicode码点转换为字节序列。它主要使用16位2字节来表示Unicode的基本多文种平面BMPBasic Multilingual Plane即从U0000到UFFFF范围内的字符。对于超出BMP的字符即从U10000到U10FFFFUTF-16使用32位4字节表示通过所谓的“代理对”surrogate pairs实现。
具体规则 BMP字符
对于码点在U0000到UFFFF范围内的字符UTF-16直接只用两个字节即一个16位二进制值来表示。例如字符’你’的Unicode码点是U4F60在UTF-16中直接表示为4F60。
补充平面字符
对于码点在U10000到U10FFFF范围内的字符UTF-16使用4个字节即2个16位二进制值称为“代理对”来表示。这两个16位值分别是一个高代理High Surrogate和一个低代理Low Surrogate。 高代理范围D800到DBFF低代理范围DC00到DFFF 例如表情符号的Unicode码点是U1F60A在UTF-16中表示为两个char高代理D83D和低代理DE0A。
示例代码
public class Utf16Example {public static void main(String[] args) {// BMP字符 你char bmpChar \u4F60; // U4F60System.out.println(BMP character: bmpChar);System.out.println(UTF-16 encoding (hex): Integer.toHexString(bmpChar));// 补充平面字符 String emoji \ud83d\ude0a; // U1F60ASystem.out.println(Supplementary character: emoji);for (int i 0; i emoji.length(); i) {System.out.printf(UTF-16 encoding (hex): %04X\n, (int) emoji.charAt(i));}}
}输出示例
BMP character: 你
UTF-16 encoding (hex): 4F60
Supplementary character:
UTF-16 encoding (hex): D83D
UTF-16 encoding (hex): DE0A和UTF-8区别
3、Base64
Base64是一种二进制到文本的编码方法主要用于将任意二进制数据转换为ASCII字符串格式。它广泛应用于电子邮件附件、URL编码、HTTP基本认证等领域。
目的 确保二进制数据能够在只支持文本的环境中安全传输例如通过电子邮件或HTTP请求传递。
工作原理 编码过程Base64将每3个字节24位的二进制数据分成4组每组6位并将每个6位值映射到一个Base64字符表中的字符共64个字符A-Z, a-z, 0-9, , /。如果输入的数据不是3的倍数则会在末尾添加填充字符。 解码过程将Base64编码的字符串还原为原始的二进制数据。
示例 假设我们有一段二进制数据Hello。
import java.util.Base64;public class Base64Example {public static void main(String[] args) {String originalString Hello;// 使用Base64编码String encodedString Base64.getEncoder().encodeToString(originalString.getBytes());System.out.println(Encoded with Base64: encodedString);// 使用Base64解码byte[] decodedBytes Base64.getDecoder().decode(encodedString);String decodedString new String(decodedBytes);System.out.println(Decoded from Base64: decodedString);}
}输出示例
Encoded with Base64: SGVsbG8
Decoded from Base64: Hello4、区别总结 5、具体应用场景
1、UTF-8
网页内容大多数现代网页使用UTF-8编码来显示各种语言的文本。文件存储许多文本文件如HTML、CSS、JavaScript文件默认使用UTF-8编码。
2、UTF-16
编程语言内部表示Java和C等编程语言使用UTF-16作为其字符串的内部表示。数据库存储某些数据库系统也支持UTF-16编码。
3、Base64
电子邮件附件由于SMTP协议最初设计时并未考虑二进制数据的传输因此Base64编码被广泛用于将附件转换为文本格式进行传输。URL编码在URL中传递二进制数据时Base64编码可以确保数据不会被误解为URL特殊字符。HTTP基本认证用户名和密码在HTTP基本认证中通常使用Base64编码后传递。
6、示例代码对比
UTF-8和UTF-16编码示例
import java.nio.charset.StandardCharsets;public class EncodingExample {public static void main(String[] args) {String originalString 你好;// UTF-8 编码byte[] utf8Bytes originalString.getBytes(StandardCharsets.UTF_8);System.out.println(Encoded with UTF-8:);printByteArray(utf8Bytes);// UTF-16 编码byte[] utf16Bytes originalString.getBytes(StandardCharsets.UTF_16);System.out.println(Encoded with UTF-16:);printByteArray(utf16Bytes);}private static void printByteArray(byte[] bytes) {for (byte b : bytes) {System.out.printf(%02X , b);}System.out.println();}
}输出示例
Encoded with UTF-8:
E4 BD A0 E5 A5 BD
Encoded with UTF-16:
FE FF 4F 60 59 7D Base64编码示例
import java.util.Base64;public class Base64Example {public static void main(String[] args) {String originalString Hello, World!;// 使用 Base64 编码String encodedString Base64.getEncoder().encodeToString(originalString.getBytes());System.out.println(Encoded with Base64: encodedString);// 使用 Base64 解码byte[] decodedBytes Base64.getDecoder().decode(encodedString);String decodedString new String(decodedBytes);System.out.println(Decoded from Base64: decodedString);}
}输出示例
Encoded with Base64: SGVsbG8sIFdvcmxkIQ
Decoded from Base64: Hello, World!总结
UTF-8和UTF-16是用于将Unicode码点转换为字节序列的编码方式适用于文本数据的存储和传输。UTF-8兼容ASCII适合纯英文文本和多语言混合文本而UTF-16主要用于编程语言内部表示和某些数据库系统。Base64是一种二进制到文本的编码方法用于将任意二进制数据转换为ASCII字符串以确保数据能够在只支持文本的环境中安全传输。它广泛应用于电子邮件附件、URL编码和HTTP基本认证等场景。
4、字符串和二进制转换
在计算机系统中字符串转换为二进制编码和从二进制还原为字符串解码的过程是通过字符编码标准来实现的。常见的字符编码标准包括ASCII、UTF-8、UTF-16等。这些编码标准定义了如何将字符映射到二进制表示。
1、字符串转二进制编码
编码过程是将字符串中的每个字符转换为其对应的二进制表示。不同的字符编码标准有不同的规则。
例如
ASCII每个字符用7位或8位表示实际使用8位其中一位通常为0。UTF-8可变长度编码单字节字符用1字节表示其他字符可能需要2到4字节。UTF-16可变长度编码基本多文种平面BMP中的字符用2字节表示其他字符用4字节表示。Java使用UTF-16编码来表示字符char类型占用2字节超出BMP的字符使用代理对表示。 简单说明下 对于字母‘A’如果使用ASCII编码仅会开一个字节的空间。如果使用UTF-8编码也是会仅开辟一个字节的存储空间UTF-8完全兼容ASCII码。如果使用UTF-16编码会开辟2个字节的空间来存储。
字符串转换为二进制的过程通常分为两个主要步骤 1、根据编码方式将字符串转换为字节数组
字符串中的每个字符首先根据指定的编码方式如UTF-8、UTF-16或ASCII转换为相应的字节序列。不同的编码方式会生成不同长度和格式的字节数组。 2、将字节数组转换为二进制表示每个字节可以进一步表示为一个8位的二进制数。因此字节数组可以直接映射为一系列的二进制位。
代码示例
import java.nio.charset.StandardCharsets;public class StringToBinaryExample {public static void main(String[] args) {// 原始字符串String originalString Hello, World!;// 使用 UTF-8 编码将字符串转换为字节数组二进制byte[] encodedBytes originalString.getBytes(StandardCharsets.UTF_8);// 打印字节数组System.out.println(Encoded bytes (in hex):);for (byte b : encodedBytes) {System.out.printf(%02X , b); // 16进制输出X输出大写x输出小写}System.out.println();// 可选打印每个字节的二进制表示System.out.println(Encoded bytes (in binary):);for (byte b : encodedBytes) {System.out.printf(%8s , Integer.toBinaryString(b 0xFF));}System.out.println();}
}输出示例
Encoded bytes (in hex):
48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Encoded bytes (in binary):
01001000 01100101 01101100 01101100 01101111 00101100 00100000 01010111 01101111 01110010 01101100 01100100 00100001解释 原始字符串Hello, World!包含13个字符且都是普通ASCII字符所以在UTF-8编码后仅开辟了13个字节存储。
2、二进制还原为字符串解码
解码过程是将二进制数据转换回原始字符串。这需要知道原始字符串使用的字符编码标准ASCIIUTF-8或UTF-16以便正确地解释二进制数据。
以UTF-8为例说明 在将二进制数据还原为字符串时特别是使用UTF-8编码的情况下确实需要特别注意其变长特性。UTF-8是一种变长编码格式字符的长度可以从1到4字节不等。因此解析UTF-8编码的二进制数据时需要根据每个字节的前几位来判断该字符占用多少个字节。
步骤概述 1、读取字节流从二进制数据中逐字节读取。 2、识别字节类型。 原则根据字节的前几位确定该字节是单字节字符还是多字节字符的一部分。 3、组合字节对于多字节字符按规则组合相应的字节以形成完整的字符。 4、转换为字符将组合后的字节序列转换为对应的 Unicode 码点再转换为字符。
说明下识别为单字节还是多字节字符的具体规则如 1、单字节字符
如果字节的第一位是0即(b 0x80) 0则该字节是一个单字节字符。直接取8位二进制数转换成Unicode字符。 2、双字节字符如果字节的前三位是110即(b 0xE0) 0xC0则该字节是一个双字节字符的开始。组合当前字节和下一个字节并将其转换为字符。即取16位二进制数转换为Unicode字符。 3、三字节字符如果字节的前四位是1110即(b 0xF0) 0xE0则该字节是一个三字节字符的开始。组合当前字节及其后两个字节并将其转换为字符。即取24位二进制数转换为Unicode字符。 4、四字节字符如果字节的前五位是11110即(b 0xF8) 0xF0则该字节是一个四字节字符的开始。组合当前字节及其后三个字节并将其转换为字符。即取32位二进制数转换为Unicode字符。
解析原理代码示例
import java.nio.charset.StandardCharsets;public class Utf8DecodeExample {public static void main(String[] args) {byte[] byteArray { (byte) 0xE4, (byte) 0xBD, (byte) 0xA0, (byte) 0xE5, (byte) 0xA5, (byte) 0xBD, (byte) 0xF0, (byte) 0x9F, (byte) 0x98, (byte) 0x8A };StringBuilder decodedString new StringBuilder();int i 0;while (i byteArray.length) {byte b byteArray[i];if ((b 0x80) 0) {// 单字节字符 (0xxxxxxx)decodedString.append((char) b);i;} else if ((b 0xE0) 0xC0) {// 双字节字符 (110xxxxx 10xxxxxx)int codePoint ((b 0x1F) 6) | (byteArray[i 1] 0x3F);decodedString.append((char) codePoint);i 2;} else if ((b 0xF0) 0xE0) {// 三字节字符 (1110xxxx 10xxxxxx 10xxxxxx)int codePoint ((b 0x0F) 12) | ((byteArray[i 1] 0x3F) 6) | (byteArray[i 2] 0x3F);decodedString.append((char) codePoint);i 3;} else if ((b 0xF8) 0xF0) {// 四字节字符 (11110xxx 10xxxxxx 10xxxxxx 10xxxxxx)int codePoint ((b 0x07) 18) | ((byteArray[i 1] 0x3F) 12) | ((byteArray[i 2] 0x3F) 6) | (byteArray[i 3] 0x3F);decodedString.append(Character.toChars(codePoint));i 4;}}System.out.println(Decoded string: decodedString.toString());}
}可以直接使用现成的方法new String()。 代码示例
import java.nio.charset.StandardCharsets;public class BinaryToStringExample {public static void main(String[] args) {// 已编码的字节数组假设这是从某个地方获取的二进制数据byte[] encodedBytes {72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100, 33};// 使用 UTF-8 解码将字节数组转换回字符串String decodedString new String(encodedBytes, StandardCharsets.UTF_8);// 打印还原后的字符串System.out.println(Decoded string: decodedString);}
}输出示例 Decoded string: Hello, World! 解释 第一步编码我们打印%02X指定输出为十六进制数据实际上十六进制的48就是十进制的72。
3、编码与解码的原理
1、字符编码
字符编码是将字符集中的字符映射到一组数字通常是整数然后进一步映射到二进制表示的过程。 编码过程先将字符转字节数组在将字节数组转二进制的过程。
常见的字符编码标准有
ASCII仅支持128个字符每个字符用7位表示实际使用8位。UTF-8一种变长编码兼容ASCII单字节字符用1字节表示其他字符可能需要2到4字节。UTF-16另一种变长编码基本多文种平面BMP中的字符用2字节表示其他字符用4字节表示。
2、Java中的字符编码
在Java中字符串是以Unicode格式存储的具体来说是使用UTF-16编码。当你使用getBytes()方法时你可以指定一个字符集如UTF-8或UTF-16该方法会根据指定的字符集将字符串转换为字节数组。
getBytes(Charset charset)方法
参数指定要使用的字符集如StandardCharsets.UTF_8。返回值返回一个字节数组表示编码后的二进制数据。
new String(byte[] bytes, Charset charset)方法
参数 bytes包含二进制数据的字节数组。charset指定要使用的字符集如StandardCharsets.UTF_8。 返回值返回一个字符串表示解码后的文本。
示例处理非ASCII字符
import java.nio.charset.StandardCharsets;public class NonAsciiEncodingExample {public static void main(String[] args) {// 包含非ASCII字符的字符串String originalString 你好世界;// 使用UTF-8编码将字符串转换为字节数组二进制byte[] encodedBytes originalString.getBytes(StandardCharsets.UTF_8);// 打印字节数组System.out.println(Encoded bytes (in hex):);for (byte b : encodedBytes) {System.out.printf(%02X , b); // 十六进制4位展示每个字节}System.out.println();// 可选打印每个字节的二进制表示System.out.println(Encoded bytes (in binary):);for (byte b : encodedBytes) {System.out.printf(%8s , Integer.toBinaryString(b 0xFF)); // 二进制展示}System.out.println();}
}输出示例
Encoded bytes (in hex):
E4 BD A0 E5 A5 BD EF BC 8C E4 B8 96 E7 95 8C EF BC 81
Encoded bytes (in binary):
11100100 10111101 10100000 11100101 10100101 10111101 11101111 10111100 10101100 11100100 10111000 10010110 11100111 10010101 10001100 11101111 10111100 10100001 示例解码非ASCII字符
import java.nio.charset.StandardCharsets;public class NonAsciiDecodingExample {public static void main(String[] args) {// 已编码的字节数组假设这是从某个地方获取的二进制数据byte[] encodedBytes { // 0x标识16进制的数(byte) 0xE4, (byte) 0xBD, (byte) 0xA0,(byte) 0xE5, (byte) 0xA5, (byte) 0xBD,(byte) 0xEF, (byte) 0xBC, (byte) 0x8C,(byte) 0xE4, (byte) 0xB8, (byte) 0x96,(byte) 0xE7, (byte) 0x95, (byte) 0x8C,(byte) 0xEF, (byte) 0xBC, (byte) 0x81};// 使用 UTF-8 解码将字节数组转换回字符串String decodedString new String(encodedBytes, StandardCharsets.UTF_8);// 打印还原后的字符串System.out.println(Decoded string: decodedString);}
}输出示例 Decoded string: 你好世界
4、字符串和二进制转换总结
编码将字符串转换为二进制数据的过程涉及选择合适的字符编码标准如UTF-8。Java提供了getBytes(Charset charset)方法来进行编码操作。解码将二进制数据转换回字符串的过程同样需要知道原始字符串使用的字符编码标准。Java提供了new String(byte[] bytes, Charset charset)方法来进行解码操作。
通过理解字符编码的基本原理和使用Java的内置方法可以轻松地在字符串和二进制数据之间进行转换。这对于处理网络通信、文件存储等场景非常有用。
乘风破浪Dare to Be
- 上一篇: 网站服务器搭建与管理上海知名的网站公司
- 下一篇: 网站服务器的采购方案织梦网站 防黑






