簡體   English   中英

反向解析多字節

[英]Reverse Parse Multi-Byte

我想確定緩沖區中定義為開始和結束之間字節的最后一個字符是英文還是日文。 我讀到了 uTF-8 ,其中日文字符有兩個字節長,並且高字節的高位總是有 1,而低字節的高位可以有 1 或 0。

我正在嘗試返回 integer 2 表示日語(2 字節),1 表示英語,0 表示緩沖區中的數據格式不正確。

公共 static int NumChars(字節開始,字節結束)。 你能指出我正確的方向嗎? 我很困惑如何解決這個問題。 我正在考慮使用 xor 來查找高位的 MSB 是否為 1 然后返回 2,但即使我理解正確,我也有疑問。

Jeevan UTF-8 字符字節長度可以在 1 到 4 個字節之間。

所以如果你想為日文字符打印 2,請使用這個 unicode。

SJIS

例子: -

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

在這個線程上有一個關於這個的討論, guesing-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));

Output:

buffer: [97, 98, 99, -29, -127, -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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM