jdk api之UnsupportedEncodingException基础、应用、实战

news2024/11/15 21:41:33

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

关注【架构师成长之道】 输入“java基础课程”,即可免费获得全套架构师全套课程

1.76 UnsupportedEncodingException

基本概念

UnsupportedEncodingException 是 Java 中的一个异常类,它继承自 java.io.UnsupportedEncodingException。这个异常通常在使用不支持的字符编码时抛出。以下是对 UnsupportedEncodingException 的属性、方法和一个简单示例的介绍:

属性:

  • 无特定属性,但是继承了 java.io.UnsupportedEncodingException 的属性。

方法:

  1. String getMessage():返回此异常的详细消息字符串。

小例子:

javaCopy code
import java.io.UnsupportedEncodingException;
​
public class UnsupportedEncodingExceptionExample {
    public static void main(String[] args) {
        try {
            // 尝试使用不支持的字符编码
            String str = new String("Hello, world!".getBytes(), "invalidCharset");
        } catch (UnsupportedEncodingException e) {
            // 捕获 UnsupportedEncodingException 并输出异常信息
            e.printStackTrace();
        }
    }
}

在这个示例中,我们尝试使用一个不支持的字符编码("invalidCharset"),在 String 构造函数中将一个字节数组转换为字符串。由于这个字符编码是无效的,因此会抛出 UnsupportedEncodingException。我们捕获这个异常并输出其堆栈跟踪信息。

UnsupportedEncodingException 主要用于指示不支持的字符编码,通常发生在使用 String 的构造函数或 getBytes() 方法时指定了不正确或不支持的字符编码。在实际开发中,要确保使用正确的字符编码,以避免这种异常的发生。

应用场景:

UnsupportedEncodingException 通常在字符编码相关的操作中抛出,以下是几个常见的应用场景及对应的代码实现示例:

1. 在字符串编码和解码过程中,指定了不支持的字符编码:
javaCopy code
import java.io.UnsupportedEncodingException;
​
public class EncodingExample {
    public static void main(String[] args) {
        try {
            // 尝试使用不支持的字符编码进行字符串编码
            byte[] encodedBytes = "Hello, world!".getBytes("invalidCharset");
        } catch (UnsupportedEncodingException e) {
            // 捕获 UnsupportedEncodingException 并输出异常信息
            e.printStackTrace();
        }
    }
}
2. 在创建字符串时,使用了不支持的字符编码:
javaCopy code
import java.io.UnsupportedEncodingException;
​
public class StringCreationExample {
    public static void main(String[] args) {
        try {
            // 尝试使用不支持的字符编码创建字符串
            String str = new String("Hello, world!".getBytes(), "invalidCharset");
        } catch (UnsupportedEncodingException e) {
            // 捕获 UnsupportedEncodingException 并输出异常信息
            e.printStackTrace();
        }
    }
}
3. 在网络通信中,指定了不支持的字符编码:
javaCopy code
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
​
public class NetworkCommunicationExample {
    public static void main(String[] args) {
        try {
            // 尝试使用不支持的字符编码解码 URL
            String decodedURL = URLDecoder.decode("http://example.com/%E4%B8%AD%E6%96%87%E7%BD%91%E5%9D%80", "invalidCharset");
        } catch (UnsupportedEncodingException e) {
            // 捕获 UnsupportedEncodingException 并输出异常信息
            e.printStackTrace();
        }
    }
}
4. 在读取或写入文件时,使用了不支持的字符编码:
javaCopy code
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
​
public class FileIOExample {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                // 尝试使用不支持的字符编码处理文件内容
                byte[] bytes = line.getBytes("invalidCharset");
                // 处理文件内容...
            }
        } catch (IOException | UnsupportedEncodingException e) {
            // 捕获 IOException 和 UnsupportedEncodingException 并输出异常信息
            e.printStackTrace();
        }
    }
}

在以上示例中,通过尝试使用不支持的字符编码进行字符串编码、解码、创建字符串和文件处理等操作,会导致 UnsupportedEncodingException 异常的抛出。在实际开发中,要避免这种异常的发生,应该确保使用正确的字符编码。

实战例子

在实际项目中,UnsupportedEncodingException 可能会出现在处理网络请求、文件读写、字符串转换等场景中。下面是一个示例项目,演示了如何处理从网络上接收到的数据,解析并存储到文件中,同时处理可能出现的字符编码异常。

假设我们有一个网络服务,接收来自客户端的数据,并将其保存到文件中。客户端发送的数据是使用不确定的字符编码进行编码的,我们需要将其转换为正确的字符编码并存储到文件中。

javaCopy code
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
​
public class NetworkDataProcessor {
    public static void main(String[] args) {
        final int PORT = 8080;
​
        try (ServerSocket serverSocket = new ServerSocket(PORT)) {
            System.out.println("Server started. Listening on port " + PORT);
​
            while (true) {
                try (Socket clientSocket = serverSocket.accept();
                     BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))) {
​
                    // 读取客户端发送的数据
                    StringBuilder requestData = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        requestData.append(line).append("\n");
                    }
​
                    // 处理数据(假设直接存储到文件)
                    saveDataToFile(requestData.toString(), "received_data.txt");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
​
    public static void saveDataToFile(String data, String fileName) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
            // 将数据写入文件(假设数据需要重新编码为UTF-8)
            writer.write(new String(data.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
            System.out.println("Data saved to file: " + fileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们创建了一个基本的网络服务器,监听8080端口,并在接收到客户端连接后读取客户端发送的数据。然后,我们将接收到的数据存储到文件中。由于客户端发送的数据可能使用了不确定的字符编码,我们在将数据写入文件之前,将其重新编码为 UTF-8 格式,以避免出现 UnsupportedEncodingException 异常。

在实际项目中,你可以根据需求进一步扩展这个示例,比如添加数据处理逻辑、异常处理、多线程支持等功能,以构建更完整的网络数据处理应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1544286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣HOT100 - 49. 字母异位词分组

解题思路&#xff1a; 排序 注意&#xff1a; 返回时不能用List&#xff0c;因为List是抽象类&#xff0c;return的必须是List的具体实现&#xff0c;如ArrayList class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String, Lis…

哈希存储、哈希表、哈希表的基本操作、算法的一些概念

我要成为嵌入式高手之3月25日数据结构第七天&#xff01;&#xff01; ————————————————————————————— 搜索(查找)二叉树 思想&#xff1a;左大右小 主要为了进行二分查找&#xff0c;由于根节点选择不合适&#xff0c;容易造成树不平衡&#…

NOMA免调度接入技术

标题 系统模型 参考视频&#xff1a;添加链接描述 利用接收机的复杂度提升为代价&#xff0c;提升频谱效率。为了保证上行方向上面&#xff0c;能够接入更多的用户&#xff0c;NOMA的根本思路&#xff0c;就是让多个用户占用相同的资源进行上行传输 系统模型 采用TDMA的方式…

K8s-网络原理-下篇

引言 本文是《深入剖析 K8s》的学习笔记&#xff0c;相关图片和案例可从https://github.com/WeiXiao-Hyy/k8s_example中获取&#xff0c;欢迎Star! K8s 的网络隔离: NetWorkPolicy K8s 如何考虑容器之间网络的“隔离” -> NetWorkPolicy 以下是一个 NetWorkPolicy 的定义…

msvcp110.dll丢失修复办法

在计算机使用过程中&#xff0c;我们经常会遇到一些扩展名为.dll的文件&#xff0c;这些文件是动态链接库文件&#xff0c;用于提供程序运行时所需的函数和资源。其中&#xff0c;msvcp110.dll文件是一个非常重要的动态链接库文件&#xff0c;它属于Microsoft Visual C 2012 Re…

【vue核心技术实战精讲】1.3 - 1.5 VUE 指令 (上)

文章目录 前言 本节内容1、v-text 和 v-html代码效果 2、v-if 和 v-show代码效果 3、v-bind3.1、用法&#xff1a;v-bind: 属性 &#xff0c;简写 :3.2、动态 attribute 名效果 3.3、内联字符串拼接效果 3.4、绑定 class效果 3.5、style 绑定3.6、绑定一个全是 attribute 的对…

学点儿Java_Day10_集合框架(List、Set、HashMap)

1 简介 ArrayList: 有序(放进去顺序和拿出来顺序一致)&#xff0c;可重复 HashSet: 无序(放进去顺序和拿出来顺序不一定一致)&#xff0c;不可重复 Testpublic void test1() {String[] array new String[3];//List: 有序 可重复//有序: 放入顺序 与 拿出顺序一致&#xff0c;…

精酿啤酒:酿造工艺的传承与改进

啤酒酿造工艺是一种历史悠久且不断发展的技艺&#xff0c;它随着时代的变化和技术的进步不断得到改进和创新。Fendi Club啤酒作为一家精酿啤酒品牌&#xff0c;在传承经典酿造工艺的同时&#xff0c;也不断探索和改进&#xff0c;以满足现代消费者的需求。 Fendi Club啤酒传承了…

蓝桥杯物联网遇见的重大BUG及其产生原因和解决方法

BUG列表 1、ADC的RP2显示一直为0&#xff1a;2、LORX_Tx发送数据乱码&#xff1a;3、strcmp比较char a[2] {1, 2}与“12”字符串是否相等板子会死机&#xff1a;4、LORA_Tx和LORA_Rx放一起会接收不到数据&#xff1a;5、RTC获取到静止时间&#xff1a;6、ADC获取RP1和RP2模拟量…

【k8s网络】梳理cni发展脉络

参考 《深入剖析 Kubernetes&#xff08;张磊&#xff09;》 补充 详解 Calico 三种模式&#xff08;与 Fannel 网络对比学习&#xff09;_calico vxlan-CSDN博客 容器网络 容器的网络栈 每个容器有自己的 net namespace net namespace 可以称之为网络栈所谓“网络栈”&…

睿考网:不是会计专业能考中级会计师吗?

不是会计专业也是可以考中级会计师的&#xff0c;中级会计师报名条件中并没有对专业做明确的限制&#xff0c;不同的学历对工作年限的要求不一样&#xff0c;如果考生满足报考条件就可以参加。 1.具备大学专科学历&#xff0c;从事会计工作满5年。 2.具备大学本科学历或学士学…

【Linux】进程的基本概念(进程控制块,ps命令,top命令查看进程)

目录 01.进程的基本概念 程序与进程 进程的属性 02.进程控制块&#xff08;PCB&#xff09; task_struct的内容分类 组织进程 03.查看进程 ps命令 top指令 在计算机科学领域&#xff0c;进程是一项关键概念&#xff0c;它是程序执行的一个实例&#xff0c;是操作系统的…

【Linux】线程预备知识{远程拷贝/重入函数与volatile关键字/认识SIGCHILD信号/普通信号/实时信号}

文章目录 0.远程拷贝1.重入函数与volatile关键字2.认识SIGCHILD信号3.普通信号/实时信号 0.远程拷贝 打包资源&#xff1a;tar czf code.tgz *远程传输&#xff1a;scp code.tgz usr服务器ip:/home/usr/路径解压&#xff1a;tar xzf code.tgz 1.重入函数与volatile关键字 先看…

【智能算法】秃鹰搜索算法(BES)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2020年&#xff0c; Alsattar等人受到秃鹰猎食自然行为启发&#xff0c;提出了秃鹰搜索算法&#xff08;Bald Eagle Search&#xff0c;BES&#xff09;。 2.算法原理 2.1算法思想 BES主要分为三…

龙智亮相2024国际集成电路展览会暨研讨会(IIC Shanghai),分享芯片研发及管理解决方案与技术实践

2024年3月28-29日&#xff08;周四-周五&#xff09;&#xff0c;上海张江科学会堂&#xff0c;2024国际集成电路展览会暨研讨会&#xff08;IIC Shanghai 2024&#xff09;即将盛大开幕。龙智携芯片研发及管理解决方案、最佳实践与案例&#xff0c;以及惊喜大奖在#1A14展位等着…

第十九章 linux部署scrapyd

文章目录 1. linux部署python环境1. 部署python源文件环境2. 下载python3. 解压安装包4. 安装5. 配置环境变量6. 检查是否安装成功7. 准备python使用的包8. 安装scrapyd9. 配置scrapyd10. 开放6800端口 2. 部署gerapy1. 本机下载包2. 初始化3. 进入gerapy同步数据库4. 创建用户…

堂哥让我给他做个真人动漫头像

背景 堂哥最喜欢的动漫是死神。他给了我一张死神主角一户的头像&#xff0c;以及自己的头像&#xff0c;希望我产出一张真人动漫头像。 一户的头像&#xff1a; 堂哥自拍照&#xff1a; 最近&#xff0c;有大佬部署了个stable diffusion&#xff0c;正好拿来一试身手。 stab…

优质视频素材库排行榜前十名有哪些?

在视频创作的世界中&#xff0c;每一帧画面、每一个音符都承载着无限的可能。为了帮助你更好地探索这些可能性&#xff0c;我继续为你精选了一系列素材网站。这些网站不仅能够提供高质量的视频、音效和图像素材&#xff0c;还能激发你的创意灵感&#xff0c;助你一臂之力。 1&…

利器 | 测试必会之 Linux 三剑客 ( grep / awk / sed )

Linux 给人的印象是黑乎乎的神秘窗口&#xff0c;文本操作和数据处理似乎没有 Windows 窗口界面直观方便。其实Linux 有自己的独特的法宝&#xff0c;称之为三剑客&#xff1a;grep&#xff0c;awk 和 sed。你可以用这三件法宝很方便的处理数据 &#xff1a;查找&#xff0c;分…