是否有任何免费的java库可用于将字符串转换为其他编码,例如 <代码>的iconv ?我正在使用Java 1.3版。

有帮助吗?

解决方案

您不需要超出标准库的库 - 只需使用 Charset 。 (您可以使用String构造函数和getBytes方法,但我个人不喜欢使用字符编码的名称。错别字的空间太大。)

编辑:正如评论中所指出的,您仍然可以使用Charset实例,但易于使用String方法: new String(bytes,charset)字符串。的getBytes(字符集)

请参阅“网址编码(或:'这是什么'<代码>%20 &quot; URL中的代码?')&quot;。

其他提示

CharsetDecoder 应该是你要找的,不是吗?

许多网络协议和文件使用面向字节的字符集存储其字符,例如 ISO-8859-1 ISO-Latin-1 )。
但是,Java的本机字符编码是 Unicode UTF16BE(十六 - 位UCS转换格式,大端字节顺序)。

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

  

Java虚拟机的每个实例都有一个默认字符集,它可能是也可能不是标准字符集之一。
  [ US-ASCII ISO-8859-1 aka ISO-LATIN-1 UTF-8 ,<代码> UTF-16BE
UTF-16LE UTF-16 ]
  默认字符集是在虚拟机启动期间确定的,通常取决于底层操作系统使用的语言环境和字符集。

此示例演示如何将 ByteBuffer 中的 ISO-8859-1 编码字节转换为 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) {
}

我想补充一点,如果String最初使用错误的编码进行编码,则可能无法将其更改为其他编码而没有错误。 问题并不是说这里的转换是从错误的编码转换为正确的编码,但我个人偶然发现这个问题只是因为这种情况所以只是为了其他人。

其他问题的答案给出了解释为什么转换并不总能产生正确结果的原因 https://stackoverflow.com/a/2623793/4702806

如果您将unicode视为一个字符集(它实际上是 - 它基本上是所有已知字符的编号集),这将更加容易。您可以将其编码为UTF-8(每个字符1-3个字节,取决于)或UTF-16(每个字符2个字节或使用代理项对4个字节)。

回到时间的迷雾中Java曾经使用UCS-2来编码unicode字符集。这样每个字符只能处理2个字节,现在已经过时了。添加代理对并升级到UTF-16是一个相当明显的黑客攻击。

很多人认为他们应该首先使用UTF-8。当Java最初编写时,unicode总共远远超过65535个字符...

UTF-8和UCS-2 / UTF-16可以通过文件开头的字节顺序标记合理地区分。如果存在,那么该文件处于该编码状态是一个相当不错的选择 - 但这并不是一个确定的事情。您可能还会发现该文件位于其中一种编码中,但没有字节顺序标记。

我对ISO-8859-2了解不多,但如果几乎每个文件都是该编码中的有效文本文件,我都不会感到惊讶。你能做的最好的就是启发式检查。实际上,维基百科页面谈论它会表明只有字节0x7f无效。

无法读取文件“因为它是”然后获取文本 - 文件是一个字节序列,因此您必须应用字符编码才能将这些字节解码为字符。

来自stackoverflow的来源

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top