栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

编码解码实战

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

编码解码实战

一 对字符串进行编码和解码操作 1 代码
public static void test21() throws CharacterCodingException {
    Charset charset = Charset.forName("utf-8");
    // 获取 utf-8 编码器
    CharsetEncoder charsetEncoder = charset.newEncoder();
    // 获取 utf-8 解码器
    CharsetDecoder charsetDecoder = charset.newDecoder();
    // 后续存储的“丁香JAVA讲师”共16字节:UTF-8中,每个常见汉字占 3 个字节;每个英文占 1 个字节。
    CharBuffer charBuffer = CharBuffer.allocate(16);
    charBuffer.put("丁香JAVA讲师");
    charBuffer.flip();

    System.out.println("编码开始");
    // 编码  :String->byte[],使用 utf-8 类型的编码器
    ByteBuffer byteBuffer = charsetEncoder.encode(charBuffer);
    for (int i = 0; i < 16; i++) { // 一个汉字占 3 个字节
        System.out.print(byteBuffer.get() + "t");
    }
    System.out.println("n编码结束n");

    byteBuffer.flip();
    // 解码:byte[]->String,也使用utf-8类型的编码器
    System.out.println("---解码开始1---");
    charBuffer = charsetDecoder.decode(byteBuffer);
    System.out.println(charBuffer.toString());
    System.out.println("---解码结束1---n");

    // byteBuffer 中存储的是经过 UTF-8 类型编码器编码后的字节码,但以下却是使用 gbk 类型的解码器解码,因此会出现乱码
    Charset charset2 = Charset.forName("gbk");
    byteBuffer.flip();
    System.out.println("---解码开始2---");
    charBuffer = charset2.decode(byteBuffer);
    System.out.println(charBuffer.toString());
    System.out.println("---解码结束2---n");
}
2 测试

编码开始

-28    -72    -127    -23    -90    -103    74    65    86    65    -24    -82    -78    -27    -72    -120    

编码结束

---解码开始1---

丁香JAVA讲师

---解码结束1---

---解码开始2---

涓侀JAVA璁插笀

---解码结束2---

二 使用 ISO-8859-1 对中文进行编码和解码 1 代码
public static void test3() throws IOException {
    FileChannel inChannel
            = FileChannel.open(Paths.get("g:\abc.txt"), StandardOpenOption.READ);
    FileChannel outChannel = FileChannel.open(Paths.get("g:\abc2.txt"),
            StandardOpenOption.WRITE, StandardOpenOption.READ, StandardOpenOption.CREATE);
    MappedByteBuffer inMappedBuf = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
    MappedByteBuffer outMappedBuf = outChannel.map(FileChannel.MapMode.READ_WRITE, 0, inChannel.size());

    Charset asciiCharset = Charset.forName("iso-8859-1");
    CharsetEncoder charsetEncoder = asciiCharset.newEncoder();
    CharsetDecoder charsetDecoder = asciiCharset.newDecoder();

    // 用 iso-8859-1 对 abc.txt 中的字符进行解码
    CharBuffer decodeResult = charsetDecoder.decode(inMappedBuf);
    // iso-8859-1 本身不能存储中文,因此会出现乱码
    for (int i = 0; i < decodeResult.length(); i++) {
        System.out.print(decodeResult.get(i) + "t");
    }
    // 用 iso-8859-1 对解码后的字符,再次进行编码
    ByteBuffer encodeBuffer = charsetEncoder.encode(decodeResult);
    outMappedBuf.put(encodeBuffer);
    inChannel.close();
    outChannel.close();
}
2 测试

ä    ¸        é    ¦        J    A    V    A    è    ®    ²    å    ¸        

但 abc2.txt 中的内容是正确的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/929938.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号