tango.text.convert.Utf 翻译
tango.text.convert.Utf(r4809)License:
BSD style: see license.txt
Version:
Initial release: Oct 2004
Authors:
Kris
快速的Unicode代码转换器。这些对于32位 x86设备的微小变化尤其敏感,因为这些设备上的寄存器级是非常小。当心细微的变化可能会延伸到执行周期的200%多。正因为如此,六种代码转换器中的三种在阻止前会读取超过输入末端一、二或三个字节。注意,为流支持添加上15%的对dchar => char转换的开销,但对其它的没有什么影响。
这些例程已对Intel P4进行调谐;别的设备用一个稍有不同的途径工作得更有效率,不过这可以像对 AMD x86 CPUs也进行适当的优化。这些算法可以从AMD64的额外寄存器得到较大的获益。对于3GHz P4,dchar/char转换处理1000个ASCII 元素的数组花费大约2500ns。调用内存管理器使周期加倍,对100个元素的数组时间成四倍。内存分配在多线程环境会显著地减缓,因此要尽可能地避免。
在utf16 和 utf8间转码时代用对用一个非优化的样式进行处理。这样的情况被认为是这个模块的边界条件。
有三种常见情况下输入可以不完整,包括utf8 => utf16, utf8 => utf32, and utf16 => utf32的每个'widening'(加宽)情况。一个边缘(edge-case)情况是utf16 => utf8,如果代理对存在。这样的情况会抛出一个异常,除非流模式被激活--在后一种模式,一个附加的整数被返回用于指明输入已经消耗了多少个元素。在所有情况下,一个正确的输出的切片被返回。
对于Unicode处理的细节见:
http://www.utf-8.com/
http://www.hackcraft.net/xmlUnicode/
http://www.azillionmonkeys.com/qed/unicode.html/
http://icu.sourceforge.net/docs/papers/forms_of_unicode/
char[] toString(wchar[] input, char[] output = null, uint* ate = null) ¶# 编 Utf8 码到最大4字节长(五或六字节的变体不支持)。 如果输出用空闲堆栈提供,它应该足够大以完成整个转码;这要做失败会引起输出被移动到堆上来代替。 返回输出缓冲区与转换后的字符相对应的一个切片,为了优化性能,返回缓冲区应该为随后的调用被指定为'output' (输出)。例如:1234567char[] output;char[] result = toString (input, output);// reset output after a reallocif (result.length > output.length) output = result;wchar[] toString16(char[] input, wchar[] output = null, uint* ate = null) ¶# 译由上面的toString() 方法产生Utf8码。 如果输出被空闲的堆栈提供,它会大得足以完成整个转码;这样做失败会导致输出被移动到堆上代替。返回输出缓冲区的一个切片,与已转换的字符相对应。为了最佳性能,返回的缓冲区将会指定为在后来的调用上的'output'。
char[] toString(dchar[] input, char[] output = null, uint* ate = null) ¶# 编Utf8码为最多为4字节长(五和六字节的变体是不支持的)。输入的dchar大于0x10ffff抛出一个异常。 如果输出用空闲的堆栈提供,它是大得足以完成整个转码;这样做失败会导致输出移动到堆上来代替。返回输出缓冲区的一个切片,与已转换的字符相对应。为了取得最大性能,返回缓冲区将对随后的调用指定为'output'(输出)。
dchar[] toString32(char[] input, dchar[] output = null, uint* ate = null) ¶# 译通过上面的toString()方法产生的Utf8码。 如果输出用空闲的堆栈提供,它是大得足以完成整个转码;这样做失败会导致输出移动到堆上来代替。返回输出缓冲区的一个切片,与已转换的字符相对应。为了取得最大性能,返回缓冲区将对随后的调用指定为'output'(输出)。
wchar[] toString16(dchar[] input, wchar[] output = null, uint* ate = null) ¶# 编Utf16码最大为2 字节长。输入的dchar 大于0x10ffff 会抛出一个异常。 如果输出用空闲的堆栈提供,它是大得足以完成整个转码;这样做失败会导致输出移动到堆上来代替。返回输出缓冲区的一个切片,与已转换的字符相对应。为了取得最大性能,返回缓冲区将对随后的调用指定为'output'(输出)。
dchar[] toString32(wchar[] input, dchar[] output = null, uint* ate = null) ¶# 译通过上面toString16() 方法产生的Utf16码。 如果输出用空闲的堆栈提供,它是大得足以完成整个转码;这样做失败会导致输出移动到堆上来代替。返回输出缓冲区的一个切片,与已转换的字符相对应。为了取得最大性能,返回缓冲区将对随后的调用指定为'output'(输出)。
dchar decode(char[] src, inout uint ate) ¶# 从给定的src文本解一个简单的dchar码,并指出从src中这样做后消耗了多少字符。 dchar decode(wchar[] src, inout uint ate) ¶# 从给定的src文本解一个简单的dchar码,并指出从src中这样做后消耗了多少字符。 char[] encode(char[] dst, dchar c) ¶# 编一个dchar码到提供的dst数组,并返回一个它表示该编码的切片。 wchar[] encode(wchar[] dst, dchar c) ¶# 编一个dchar码到提供的dst数组,并返回一个它表示该编码的切片。 bool isValid(dchar c) ¶# 判断给定字符是否有效? T[] fromString8(T)(char[] s, T[] dst) ¶# 从一个char[]转换到dst提供的类型。 返回给定dst的一个切片,它必须足够大以容纳结果,否则在堆上分配数组。没有转换要求的地方返回原输入。 T[] fromString16(T)(wchar[] s, T[] dst) ¶# 从一个wchar[]转换到dst提供的类型。 返回给定dst的一个切片,它必须足够大以容纳结果,否则在堆上分配数组。没有转换要求的地方返回原输入。 T[] fromString32(T)(dchar[] s, T[] dst) ¶# 从一个dchar[]转换到dst提供的类型。 返回给定dst的一个切片,它必须足够大以容纳结果,否则在堆上分配数组。没有转换要求的地方返回原输入。 T[] cropLeft(T)(T[] s) ¶# 调整内容,以使提供的文字的左边没有部分编码存在。 返回输入的一个切片。 T[] cropRight(T)(T[] s) ¶# 调整内容,以使提供的文字的右边没有部分编码存在。 返回输入的一个切片。<div style="background: #eeffee;">Copyright (c) 2004 Kris Bell. All rights reserved :: Generated by dil on Thu Jul 23 00:19:39 2009. Rendered by kandil.
页:
[1]