代码之家  ›  专栏  ›  技术社区  ›  n002213f

在Java中将ANSI字符转换为UTF-8

  •  4
  • n002213f  · 技术社区  · 16 年前

    我有一个使用readUTF&writeDataInputStream类的UTF方法来反序列化和序列化字符串。如果我收到一个用ANSI编码的字符串,并且太长,大约100000个字符长,我会得到错误;

    原因: 编码字符串太长:106958字节

    4 回复  |  直到 8 年前
        1
  •  6
  •   ZZ Coder    16 年前

    编辑:刚刚意识到这是一个书写错误,而不是阅读错误。

    UTF长度只有2个字节,因此它只能容纳64K UTF-8字节。你试图写10万,这行不通。

    这个限制是硬编码的,没有办法绕过它,

    if (utflen > 65535)
        throw new UTFDataFormatException(
                "encoded string too long: " + utflen + " bytes");
    
        2
  •  3
  •   iammichael    16 年前
    byte[] asciiBytes = ...;
    String unicode = new String(asciiBytes, "US-ASCII");
    byte[] utfBytes = unicode.getBytes("UTF-8");
    
        3
  •  2
  •   Aaron Digulla    16 年前

    哪个 ANSI codepage ?有很多不同的字符编码,都是指“ANSI”。DOS代码页为437(不含绘图符号)。如果你使用代码页850,这将起作用:

    String unicode = new String(bytes, "IBM850");
    

    bytes unicode.getBytes(encoding) .

        4
  •  1
  •   István    14 年前

    this blog 。基本上,问题出在DataOutputStream中,因为它将可写字符串限制为64KB。还有其他可能的解决方法可以逐步解决这个问题,有些方法可能在不破坏实际使用的二进制数据格式的情况下工作。..