第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在 Java 中對(duì)字節(jié)數(shù)組中的補(bǔ)充 unicode 字符進(jìn)行編碼?

如何在 Java 中對(duì)字節(jié)數(shù)組中的補(bǔ)充 unicode 字符進(jìn)行編碼?

MMMHUHU 2023-05-24 15:27:45
我正在使用 anInputStream從 TCP 服務(wù)器(用 C# 編寫)讀取byte[]字節(jié)到 ,并使用new String(byteArray, "UTF-16LE"). 這種方法可以很好地編碼基本多語(yǔ)言平面中的字符,但不能處理增補(bǔ)字符。我知道 C# 中的字節(jié)是無(wú)符號(hào)的,而 Java 字節(jié)是有符號(hào)的,并且補(bǔ)充字符可以由一個(gè)或兩個(gè) unicode 值組成。        ByteBuffer wrapped = ByteBuffer.wrap(dataBytes);        wrapped.order(ByteOrder.LITTLE_ENDIAN);        short noOfSites = wrapped.getShort();        for(int i = 0; i < noOfSites; i++){            short siteNo = wrapped.getShort();            short textLength = wrapped.getShort();            byte[] textBytes = new byte[textLength];            wrapped.get(textBytes, 0, textLength);            for(byte bite : textBytes){                System.out.print(bite+" ");            } //just to see what's in the byte array            String siteText = new String(textBytes, "UTF_16LE");            System.out.println(siteNo + ": " + siteText);            siteList.add(new Site(siteNo, siteText));            publishProgress(siteNo + " - " + siteText);        }在這個(gè)例子中,dataBytes是包含從服務(wù)器讀取的字節(jié)的字節(jié)數(shù)組,noOfSites是要從服務(wù)器讀取的對(duì)象的數(shù)量,siteNo是一個(gè) ID,textLength是包含站點(diǎn)名稱的字節(jié)數(shù),textBytes是保存的數(shù)組這些字節(jié)。當(dāng)從服務(wù)器接收到單詞“MüNSTER”時(shí),讀入緩沖區(qū)的字節(jié)是: 77 0 -3 -1 78 0 83 0 84 0 69 0 82 0。-3 -1但是,無(wú)法識(shí)別“ü”字符,我認(rèn)為這是由于 Java 嘗試(但未能)編碼的 UTF-16 值造成的。我知道在 C# 中,“ü”由 表示DC-00,但我不明白為什么-3 -1在 Java 中會(huì)變成這樣。任何幫助將不勝感激。
查看完整描述

1 回答

?
GCT1015

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊

“?”字符未在您的源代碼中編碼 - 到達(dá)接收器端“-3,-1”的序列是-替換字符0xfffd的 UTF 16 LE 編碼。

如果沒(méi)有看到服務(wù)器端代碼,很難判斷發(fā)生了什么,但它很糟糕。Utf-16 可以處理像“ü”這樣的字符而不會(huì)妨礙它。實(shí)際上,它甚至不在前 256 個(gè) unicode 代碼點(diǎn)之外,更不用說(shuō)在 Base Multilingual Plane 之外了。(這是一個(gè)在許多西方語(yǔ)言中很常見的字符,甚至是拉丁字符,它怎么會(huì)脫離為世界上所有語(yǔ)言設(shè)計(jì)的字符的平面?)

發(fā)生的事情是,從您的文本到用于電匯的 utf-16 的代碼路徑在某些時(shí)候被明確指示為任何不僅僅是 ASCII 的字符設(shè)置替換字符(舊版 unicode 代碼點(diǎn) 0x20 -0x7f,其中僅包括無(wú)重音的拉丁字符)。

明確地說(shuō),換句話說(shuō):數(shù)據(jù)在服務(wù)器端被破壞,所有非 ASCII 適合的字符都可能被壓縮為“替換字符”。對(duì)客戶端代碼進(jìn)行再多的改動(dòng)也無(wú)法解決這個(gè)問(wèn)題。


查看完整回答
反對(duì) 回復(fù) 2023-05-24
  • 1 回答
  • 0 關(guān)注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)