微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

反向解析多字节

如何解决反向解析多字节

我想确定缓冲区中定义为开始和结束之间的字节的最后一个字符是英语还是日语。我读过 uTF-8,其中日语字符有两个字节长,并且高字节的高位始终为 1,而低字节的高位可以为 1 或 0。

我试图为日语(2字节)返回整数 2,为英语返回整数 1,为缓冲区中的数据返回 0 格式错误

public static int NumChars(字节开始,字节结束)。 你能指出我正确的方向吗?我很困惑如何解决这个问题。我正在考虑使用xor来查找高位MSB是否为1然后返回2,但即使我理解正确我也有疑问。

解决方法

Jeevan UTF-8 字符字节长度可以在 1 到 4 个字节之间。

所以如果你想打印 2 个日语字符,请使用这个 unicode。

SJIS

示例:--

String j = "大";     
System.out.println(j.getBytes("SJIS").length);
,

在此线程 guessing-the-encoding-of-text-represented-as-byte-in-java

上对此进行了讨论

如果您可以以字符串形式获取缓冲区或其中的一部分。然后你可以使用正则表达式来匹配这样的字符集:

   String english = ".*[\\x{20}-\\x{7E}]$";
   String hiragana = ".*[\\x{3041}-\\x{3096}]$";
   
   byte[] buffer = {97,98,99,-29,-127,-126}; //"abcあ"
   System.out.println("buffer: "+Arrays.toString(buffer));
   String s = new String(buffer,"utf-8") ;

   System.out.println(s + " is hiragana=" + s.matches(hiragana));
   System.out.println(s + " is english=" + s.matches(english));

   s = "abcd";
   System.out.println(s + " is hiragana=" + s.matches(hiragana));
   System.out.println(s + " is english=" + s.matches(english));

输出:

buffer: [97,-126]
abcあ is hiragana=true
abcあ is english=false
abcd is hiragana=false
abcd is english=true

您必须找出您的程序使用的日语字符集,如 Kenji、Hiragana、Katakana 等。 如需了解更多信息,请阅读这篇文章:regular-expressions-for-japanese-text

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。