为了账号安全,请及时绑定邮箱和手机立即绑定

Java中的编码转换

/ 猿问

Java中的编码转换

FFIVE 2019-10-19 17:12:31

有没有免费的Java库,可以将一种编码形式的字符串转换为其他编码形式,例如iconv?我正在使用Java版本1.3。


查看完整描述

3 回答

?
天天世纪

您不需要标准库以外的任何库,只需使用Charset即可。(您可以只使用String构造函数和getBytes方法,但就我个人而言,我不喜欢仅使用字符编码的名称。输入错误的空间太大。)


编辑:正如注释中指出的那样,您仍然可以使用Charset实例,但是可以轻松使用String方法:new String(bytes,charset)和String.getBytes(charset)。


请参阅“ URL编码(或:%20 “ URL中的那些”代码是什么?”))。


查看完整回答
反对 回复 2019-10-19
?
慕桂英3389331

CharsetDecoder 应该是您要寻找的东西,不是吗?


许多网络协议和文件使用面向字节的字符集(例如ISO-8859-1(ISO-Latin-1))存储其字符。

但是,Java的本机字符编码是统一码 UTF16BE(16位UCS转换格式,大端字节顺序)。


请参阅Charset。这并不意味着UTF16是默认字符集(即:默认“十六位Unicode代码单元的序列与字节序列之间的映射”):


Java虚拟机的每个实例都有一个默认字符集,它可以是也可以不是标准字符集之一。

[ US-ASCII,ISO-8859-1又名ISO-LATIN-1,UTF-8,UTF-16BE,UTF-16LE,UTF-16] 

默认字符集的虚拟机的启动期间所确定,并且通常取决于语言环境和charset正在使用的底层操作系统。


此示例演示如何将a中的ISO-8859-1编码字节转换ByteBuffer为a中的字符串,CharBuffer反之亦然。


// Create the encoder and decoder for ISO-8859-1

Charset charset = Charset.forName("ISO-8859-1");

CharsetDecoder decoder = charset.newDecoder();

CharsetEncoder encoder = charset.newEncoder();


try {

    // Convert a string to ISO-LATIN-1 bytes in a ByteBuffer

    // The new ByteBuffer is ready to be read.

    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap("a string"));


    // Convert ISO-LATIN-1 bytes in a ByteBuffer to a character ByteBuffer and then to a string.

    // The new ByteBuffer is ready to be read.

    CharBuffer cbuf = decoder.decode(bbuf);

    String s = cbuf.toString();

} catch (CharacterCodingException e) {

}


查看完整回答
反对 回复 2019-10-19
?
45度呼吸

通过文件开头的字节顺序标记,可以很容易地区分UTF-8和UCS-2 / UTF-16。如果存在,那么可以肯定文件采用的是这种编码-但这并不是确定的。您可能还会发现该文件采用的是其中一种编码,但没有字节顺序标记。

我对ISO-8859-2不太了解,但是如果几乎每个文件都是该编码中的有效文本文件,我也不会感到惊讶。您能够做的最好的事情就是试探性地检查它。确实,在Wikipedia页面上谈论它会暗示只有字节0x7f无效。

没有“按原样”读取文件但仍要输出文本的想法-文件是一个字节序列,因此必须应用字符编码才能将这些字节解码为字符。


查看完整回答
反对 回复 2019-10-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信