博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。
以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】
关注【架构师成长之道】 输入“java基础课程”,即可免费获得全套架构师全套课程
1.76 UnsupportedEncodingException
基本概念
UnsupportedEncodingException
是 Java 中的一个异常类,它继承自 java.io.UnsupportedEncodingException
。这个异常通常在使用不支持的字符编码时抛出。以下是对 UnsupportedEncodingException
的属性、方法和一个简单示例的介绍:
属性:
-
无特定属性,但是继承了
java.io.UnsupportedEncodingException
的属性。
方法:
-
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
异常。
在实际项目中,你可以根据需求进一步扩展这个示例,比如添加数据处理逻辑、异常处理、多线程支持等功能,以构建更完整的网络数据处理应用程序。