有没有办法使用 Java 将 ANSI 字符串转换为 UTF。
我有一个自定义序列化程序,它使用 DataInputStream 类的 readUTF 和 writeUTF 方法来反序列化和序列化字符串。如果我收到一个以 ANSI 编码的字符串,并且太长,约 100000 个字符长,我会收到错误;
造成原因:
java.io.UTFDataFormatException:
编码字符串太长:106958 字节
然而,在我的 Junit 测试中,我可以创建一个包含 120000 个 'a 的字符串,并且它工作得很好
我检查了以下帖子,但仍然有错误;
- 在 Java 中将 UTF-8 转换为 ISO-8859-1 - 如何将其保持为单字节 https://stackoverflow.com/questions/655891/converting-utf-8-to-iso-8859-1-in-java-how-to-keep-it-as-single-byte
- 如何在 Ruby 中替换带重音的拉丁字符? https://stackoverflow.com/questions/225471/how-do-i-replace-accented-latin-characters-in-ruby#226090
该错误不是由字符编码引起的。这说明UTF数据的长度错误。
编辑:刚刚意识到这是一个写入错误,而不是读取错误。
UTF 长度只有 2 个字节,因此只能容纳 64K UTF-8 字节。你试图写 100K,这是行不通的。
这个限制是硬编码的,没有办法绕过这个,
if (utflen > 65535)
throw new UTFDataFormatException(
"encoded string too long: " + utflen + " bytes");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)