2014-12-03 58 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

相关问题