2014-12-03 59 views
2

由於Rebol 3支持unicode,並且在需要時內部使用UTF16(如果它只有ASCII字符,它是ASCII),它應該像從二進制文件複製存儲器內容並設置REBVAL結構一樣簡單。但是,我發現的唯一方法似乎是遍歷二進制文件並逐個轉換每個字符。解碼UTF16二進制文件的最有效方法是什麼?

同樣的問題適用於以UTF16編碼字符串。

+1

UTF16的內部固定用法不紅做,而是選擇根據[最高碼點在字符串中]大小(http://www.red-lang.org/2012/09/plan-for-unicode-support.html)。然而,Rebol也應該這樣做,所以任何試圖利用[REBUNI]的實現細節的誘惑(https://github.com/rebol/rebol/blob/25033f897b2bd466068d7663563cd3ff64740b94/src/include/reb-ch #L149)應該考慮到這一點。 – HostileFork 2014-12-03 22:02:57

回答

3

好吧,似乎沒有一個簡單的方法來做到這一點。所以我只是爲了這個目的添加了兩個編解碼器UTF-16LE/BE。看到這個承諾:https://github.com/zsx/r3/commit/630945070eaa4ae4310f53d9dbf34c30db712a21

隨着這一變化,你可以這樣做:

>> b: encode 'utf-16le "hello" 
== #{680065006C006C006F00} 

>> s: decode 'utf-16le b  
== "hello" 

>> b: encode 'utf-16be "hello" 
== #{00680065006C006C006F} 

>> s: decode 'utf-16be b 
== "hello" 
+0

看起來很酷......我不確定「開箱即用」的編解碼器有多遠計劃去與擴展... – HostileFork 2014-12-05 13:55:20

+0

是的,這是我不知道的東西,這就是爲什麼我首先提出了這個問題,以確保在添加新的編解碼器之前我沒有錯過任何明顯的事情。一旦我們開始添加,我們需要一個停止添加的行。 – 2014-12-08 16:02:55

相關問題