Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java.nio.charset.malformed 解决

作者:顺我者未必能活   发布日期:2026-07-13   浏览:20

import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CodingErrorAction;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;

public class MalformedInputExample {

    public static void main(String[] args) {
        // 模拟一个包含畸形字符的字节数组
        byte[] malformedBytes = { (byte) 0xFF, (byte) 0xFE, 'H', 'e', 'l', 'l', 'o' };

        // 创建一个CharsetDecoder并设置处理畸形字符的方式
        Charset charset = Charset.forName("UTF-8");
        CharsetDecoder decoder = charset.newDecoder();
        decoder.onMalformedInput(CodingErrorAction.REPLACE); // 当遇到畸形字符时,用替代字符替换
        decoder.replaceWith("�"); // 设置替代字符为 Unicode 替代字符

        // 将字节数组转换为ByteBuffer
        ByteBuffer byteBuffer = ByteBuffer.wrap(malformedBytes);

        try {
            // 解码ByteBuffer为CharBuffer
            CharBuffer charBuffer = decoder.decode(byteBuffer);
            System.out.println("解码后的字符串: " + charBuffer.toString());
        } catch (Exception e) {
            System.err.println("解码过程中发生错误: " + e.getMessage());
        }
    }
}

解释说明:

  1. 模拟畸形字符:我们创建了一个包含一些非法字节(如 0xFF0xFE)的字节数组 malformedBytes,这些字节在 UTF-8 编码中是无效的。
  2. CharsetDecoder 配置:使用 Charset.forName("UTF-8").newDecoder() 创建一个 UTF-8 的解码器,并通过 onMalformedInput(CodingErrorAction.REPLACE) 指定当遇到畸形字符时用替代字符替换。这里我们选择用 Unicode 替代字符 来表示这些无效字节。
  3. 解码过程:将字节数组包装成 ByteBuffer,然后调用 decoder.decode() 方法将其解码为 CharBuffer。最终输出解码后的字符串。

这段代码展示了如何处理和解决畸形字符的问题,确保程序不会因为非法字节而抛出异常。

上一篇:java字符串转小写

下一篇:java字符串转map

大家都在看

java url decode

java判断是windows还是linux

java原始数据类型

java连接数据库的代码

java date类型比较大小

java djl

ubuntu 卸载java

es java api

java常用的设计模式有哪些

java list 查找

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站