我正在尝试使用Java中的GB18030 cp对一些中文字符进行编码,然后我遇到了这个字符数,在Google翻译中转换为“数字”。
问题是,编码时会变成10个字节(!):
81 30 81 34 81 30 83 31 ca fd
import java.math.BigInteger;
import java.nio.charset.Charset;
public class Test3
{
public static void main(String[] args)
{
String s = new String("数");
System.out.println( "source file: "+String.format("%x ",
new BigInteger(1, s.getBytes(Charset.forName("GB18030"))) ));
}
}
当我尝试使用GB18030解码时,会导致?中文数字字符旁边出现的字符(??数)。当我尝试仅解码“CA FD”时,从上面开始的最后两个字节,它正确地解码为该字符。
谷歌翻译笔记上面的字符是简体。我的源文件也以UTF8保存。
我认为GB18030每个字符最多有4个字节?这个角色有什么特别的表现吗? (我不是中国人,BTW)
答案 0 :(得分:4)
最可能的事情是:
源文件的编码存在问题,或
你在数字之前有“隐形”字符。
您可以通过完全删除此行中的字符串文字来检查这两个字符:
String s = new String("数");
所以它看起来像这样(注意我删除了引号和字符):
String s = new String();
然后添加回"\u6570"
来获取此信息:
String s = new String("\u6570");
并查看输出是否发生变化(因为数字是Unicode代码点U+6570,因此转义序列应该是相同的字符)。如果它发生了变化,或者存在编码问题,或者在字符之前的字符串中有不可见的字符。您可以通过再添加该字符(通过从此页面复制和粘贴而不是之前的源代码)来区分这两种情况。如果问题再次出现,则是编码问题。如果没有,你有隐藏的角色。