java基础<IO输出与输入>--->字符编码

本文深入探讨了编码表的由来及其在计算机中如何用于表示不同国家的文字。详细介绍了ASCII、ISO8859-1、GB2312、GBK、Unicode及UTF-8等编码表,并通过代码实例展示了编码与解码过程。

转换流的字符编码

一、概述

编码表的由来:
1.计算机智能识别(1,0)这样的二进制数据
2.为了方便应用计算机,让他识别各个国家的文字,就将各个国家的文字用数字来表示,形成一对一的对应关系,从而形成了一张表
3.这就是编码表

二、常见的编码表:
1.ASCII:美国标准信息交换码
用一个字节中的7位就可以表示
2.ISO8859-1:拉丁码表(欧洲码表)
用一个字节的8位表示。
3.GB2312:中文码表
兼容ASCII码表,中文的两个8位高位都是1
4.GBK:升级版的中文码表
融合了更多的中文文字字符
5.Unicode:国际标准码表
所有文字都由两个8位来表示(比较浪费空间),融合了多种文字,Java语言使用的是unicode(char)
6.UTF-8:unicode转换格式(全世界通用)
最多三个字节来表示一个字符

三、代码

import java.io.*;

class EncodeStream 
{
	public static void main(String[] args) 
	{
		
	}

	public static void readText() throws IOException
	{
		InputStreamReader isr=new InputStreamReader(new FileInputStream("gbk.txt","GBK");
		char[] buf=new char[10];
		int len=isr.read[buf];
		String str=new String(buf,0,len);
		System.out.println(str);
	}

	public static void writeText()throws IOException
	{
		OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("gbk.txt"),"UTF-8");

		osw.write("你好");
		osw.close();
	
	}
}

字符编码

一、概述
编码:字符串 变 字节数组
String-->byte[];   str.getBytes();

解码:字节数组 变 字符串
byte[]-->String;   new String(byte[]);

二、代码

import java.util.*;

class EncodeStream1  
{
	public static void main(String[] args) throws Exception
	{
		String s="你好";

		byte[] b1=s.getBytes("GBK");//默认为GBK进行编码

		//byte[] b1=s.getBytes("ISO8859-1");//会出乱码

/*①*/	System.out.println(Arrays.toString(b1));//会输出4个负数(-60,-29,-70,-61)

		String s1=new String(b1,"GBK");//默认为GBK进行解码
		
/*②*/	System.out.println(s1);//会输出你好

		String s2=new String(b1,"ISO8859-1");//解码错误的s2

/*③*/	System.out.println(s2);//会输出????
		
		byte[] b2=s2.getBytes("ISO8859-1");//将s2按照ISO8859-1进行编码

		String s3=new String(b2,"GBK");//再将编码后的字节数组按照GBK进行解码

/*④*/	System.out.println(s3);//会输出"你好"

		String s4=new String(b1,"UTF-8");//将b1用UTF-8进行解码

/*⑤*/	System.out.println(s4);//会输出???

		byte[] b3=s4.getBytes("UTF-8");//将s4使用UTF-8进行编码

		String s5=new String(b3,"GBK");//将b3按照GBK进行解码

/*⑥*/	System.out.println(s5);//不会输出"你好",而会输出乱码,这是因为UTF-8也识别中文的原因。

	}
}

UTF-8修改版

 

 

 

 

 

 

 

需求响应动态冰蓄冷系统需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕需求响应动态冰蓄冷系统及其优化策略展开研究,结合Matlab代码实现,探讨了在电力需求侧管理背景下,冰蓄冷系统如何通过优化运行策略参需求响应,以实现削峰填谷、降低用电成本和提升能源利用效率的目标。研究内容包括系统建模、负荷预测、优化算法设计(如智能优化算法)以及多场景仿真验证,重点分析不同需求响应机制下系统的经济性和运行特性,并通过Matlab编程实现模型求解结果可视化,为实际工程应用提供理论支持和技术路径。; 适合人群:具备一定电力系统、能源工程或自动化背景的研究生、科研人员及从事综合能源系统优化工作的工程师;熟悉Matlab编程且对需求响应、储能优化等领域感兴趣的技术人员。; 使用场景及目标:①用于高校科研中关于冰蓄冷系统需求响应协同优化的课题研究;②支撑企业开展楼宇能源管理系统、智慧园区调度平台的设计仿真;③为政策制定者评估需求响应措施的有效性提供量化分析工具。; 阅读建议:建议读者结合文中Matlab代码逐段理解模型构建算法实现过程,重点关注目标函数设定、约束条件处理及优化结果分析部分,同时可拓展应用其他智能算法进行对比实验,加深对系统优化机制的理解。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 项目基本信息 --> <groupId>cn.njucm</groupId> <artifactId>DosePre</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>DosePre</name> <description>Drug Dose Prediction System</description> <!-- 继承 Spring Boot 父项目 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <relativePath/> <!-- 查找父POM时不从本地查找 --> </parent> <!-- 属性配置 --> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <!-- 依赖列表 --> <dependencies> <!-- Web 开发模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- JPA 数据访问 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- MySQL 驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <!-- Lombok:简化实体类代码 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- 单元测试 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 参数校验 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <!-- Jackson JSON 处理 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <!-- Spring Security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- JWT --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.5</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency> <!-- 文件上传 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> </dependencies> <!-- 构建插件 --> <build> <plugins> <!-- Spring Boot 打包插件:手动指定版本 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.7.18</version> <!-- parent 版本保持一致 --> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> <!-- 编译器插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> </project> 怎么修改
11-21
你的 `pom.xml` 整体结构是 **基本正确的**,但为了确保项目能正常运行(尤其是配合你前面的 JWT 实现),我们需要做以下几项 **关键修改和优化**: --- ## ✅ 修改目标 1. ✅ 修复潜在依赖冲突(特别是 Jackson 和 Spring Boot 冲突) 2. ✅ 确保 JJWT 能正确解析 Token 3. ✅ 移除冗余或不必要的显式版本声明 4. ✅ 提升可维护性兼容性 --- ## ✅ 最终优化后的 `pom.xml`(已修正) ```xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 项目基本信息 --> <groupId>cn.njucm</groupId> <artifactId>DosePre</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>DosePre</name> <description>Drug Dose Prediction System</description> <!-- 继承 Spring Boot 父项目 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <relativePath/> </parent> <!-- 属性配置 --> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <!-- 显式管理 JJWT 版本(虽然不是必须,便于统一) --> <jjwt.version>0.11.5</jjwt.version> </properties> <!-- 依赖列表 --> <dependencies> <!-- Web 开发模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- JPA 数据访问 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- MySQL 驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <!-- 推荐 runtime,编译时不需要 --> </dependency> <!-- Lombok:简化实体类代码 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- 单元测试 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 参数校验 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <!-- Spring Security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- JWT 支持 --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>${jjwt.version}</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>${jjwt.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>${jjwt.version}</version> <scope>runtime</scope> </dependency> <!-- 文件上传工具 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> </dependencies> <!-- 构建插件 --> <build> <plugins> <!-- Spring Boot 打包插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 不指定 version,使用 parent 中管理的版本 --> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> <!-- 编译器插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <!-- 使用 parent 一致的版本策略 --> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> </project> ``` --- ## 🔍 修改说明 & 原因解释 | 修改点 | 说明 | |--------|------| | ✅ `<scope>runtime</scope>` for `mysql-connector-java` | 更标准的做法,数据库驱动在编译时不需直接引用 | | ✅ 删除了 `jackson-databind` 的独立依赖 | ❌ 错误!Spring Boot 已通过 `spring-boot-starter-web` 自动包含 Jackson。<br>自己引入可能导致版本冲突或重复依赖。✅ 已删除 | | ✅ 添加 `<jjwt.version>` 属性统一管理版本 | 提高可维护性,避免多处写死版本号 | | ✅ 移除了 `jackson-databind` 依赖 | ⚠️ 重要!这是你之前报错的一个潜在原因:<br>手动引入 `jackson-databind` 可能导致 JJWT 解析 payload 失败(如反序列化 claims 出错) | | ✅ 不给 `spring-boot-maven-plugin` 指定 `version` | 推荐做法:由 `spring-boot-starter-parent` 统一管理插件版本 | | ✅ 保留 `maven-compiler-plugin` 并设置编码 UTF-8 | 防止中文乱码、注解处理异常等问题 | --- ## 🛠️ 为什么删除 `jackson-databind` 是关键? - `spring-boot-starter-web` 已经包含了: - `jackson-databind` - `jackson-core` - `jackson-annotations` 👉 如果你再显式添加一个不同版本的 `jackson-databind`,Maven 可能选择错误版本 → 导致: ```java Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectReader.optionalTypeArgument(Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/ObjectReader; ``` 或者: ```java UnsupportedJwtException: Unable to deserialize Claims ``` ❌ 这些都是因为 Jackson 版本不匹配! ✅ 所以:**不要手动引入 Jackson 相关库,除非你要升级整个生态** --- ## ✅ 验证是否成功的方法 ### 1. 清理并重新构建 ```bash mvn clean compile ``` ### 2. 查看依赖树(检查是否有冲突) ```bash mvn dependency:tree ``` 你应该看到类似输出: ``` [INFO] cn.njucm:DosePre:jar:1.0.0 [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.7.18:compile [INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.13.4:compile [INFO] +- io.jsonwebtoken:jjwt-api:jar:0.11.5:compile [INFO] +- io.jsonwebtoken:jjwt-impl:jar:0.11.5:runtime [INFO] \- io.jsonwebtoken:jjwt-jackson:jar:0.11.5:runtime ``` ✅ 表示 Jackson 来自 Spring Boot,JJWT 正确加载。 --- ## 💡 小贴士:如何生成安全的 Base64 密钥? 运行命令生成一个 64 字符以上的密钥并 Base64 编码: ```bash # 生成随机字符串(长度至少64) head -c 64 /dev/urandom | base64 | tr -d "=+/" | cut -c1-64 # 示例输出: yourGeneratedSecretKeyWillLookLikeThisabcdefghijkmlnopqrstuvwxyz1234 ``` 然后用它作为 `application.yml` 中的 secret,并进行 Base64 编码存储: ```bash echo -n "yourGeneratedSecretKeyWillLookLikeThisabcdefghijkmlnopqrstuvwxyz1234" | base64 ``` 结果存入 `application.yml`: ```yaml jwt: secret: eW91ckdlbmVyYXRlZFNlY3JldEtleVdpbGxMb29rTGlrZVRoaXNhYmNkZWZnaGlqa21sb... expiration: 86400 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值