Python扩展包括ICU C++API

PyICU的Python项目详细描述


PyICU的自述文件< BR/> BR/><欢迎
BR/>欢迎Pycu,Python扩展包裹ICU C++库。< BR/>< BR/> ICU代表"Unicode的国际组件"。< BR/>这些是Unicode联盟的I18N库。它的许多配套Unicode技术标准,
和许多Unicode CLDR。




另请参见CLDR主页http://cldr.unicode.org/

##在构建pyicu之前,必须构建并安装icu库。有关详细信息,请参阅每个系统的说明。


-验证icu配置程序是否可用,或者"setup"中的"includes"、"lflags"、"cflags"和"libraries"字典是否包含。py"`
包含正确的平台价值观。从ICU 60开始,-sdc= c++ 11 br/>必须出现在您的cFLAGS中。< Python StupU.Pug构建】'SudoPython Stupp.py'安装'
BR/>< BR/>运行PyICU
BR/> -Mac OS XBR/>确保'DieldLabalyApple路径''包含目录(IE)的路径< BR/>包含g icu libs。

-linux&solaris
确保"ld_library_path"包含指向包含icu libs的目录的路径,
或者将相应的`-rpath`
参数添加到``lflags`。

-windows
确保``path``contains指向包含icu dll的目录的路径。




ICU的API被记录在
用于从C++ API到相应的Python API。
BR/>字符串> BR/> BR/> ICU字符串类型,"UnoDeString",是指向可变的
数组''的类型。uchar``unicode 16位宽字符。Python Unicode类型
是一个16位或32位宽的Unicode字符的不可变字符串。
BR/>由于这些差异,"UnicoDeString"和Python’Unicode’< BR/>类型在跨越C++边界时不被合并到同一类型。已重载s,以便同时接受python str或unicode类型参数。对于"str`
对象,在将其转换为
"unicodestring``对象"时,假定使用"utf-8"编码。

若要将以"utf-8"以外的编码编码编码的python"str``转换为
icu"unicodestring``使用"unicodestring(str,encodingname)"`
构造函数。
BR/> ICU C++ API在几个
方式中接受并返回"UNIODESCOPE"参数:按值、指针或引用。
当ICU C++ API被记录为接受"UnoDeSoScess"引用< BR/>参数时,可以假定有几个对应的
PyICU Python A。pis使其以更简单的方式访问:

例如,在http://icu project.org/apiref/icu4c/classlocale.html
中记录的
``` unicodestring&;locale::getdisplayname(unicodestring&;)'``api,
可以通过几种方式从python调用:

1。icu方式从icu导入unicodestring,locale
>;>;locale=locale('pt_br')
>;>;string=unicodestring()
>;>;name=locale.getdisplayname(string)
>;>;name
<;unicodestring:葡萄牙语(巴西)>;
>;>;名称为string
true<;--返回字符串arg,并在适当位置进行了修改

2。python方式;>;>;从ICU导入locale
>;>;locale=locale('pt_br')
>;>;name=locale.getdisplayname()
>;>;name
u'葡萄牙语(巴西)

de``object.

``unicode()``构造函数强制为python unicode字符串。通常的``len()``、``str()```、comparison、
``[]``和`[:]``运算符都可用,另外还有一个
转折点,即切片不是只读的,而且`+=``也可用,因为unicodestring是可变的。例如:

>;>;name=locale.getdisplayname()
u"葡萄牙语(巴西)"
>;>;name=unicodestring(名称)
>;>;name
<;unicodestring:葡萄牙语(巴西)>;
>;>;unicode(名称)
u"葡萄牙语(巴西)
>;>>len(名称)
19
>;>>str(名称)<;--当字符符合默认编码时工作
"葡萄牙语(巴西)"
>;>;名称[3]
u't'
>;>;名称[12:18]
<;unicodesting:brazil>;
>;>;名称[12:1]8]="巴西国家"
>;>name
<;unicodestring:葡萄牙语(巴西国家)>;
>;>name+="噢joy"
>;>name
<;unicodestring:葡萄牙语(巴西国家)噢joy>;

E+C+ICU库不使用C++异常来报告错误。ICU
api都由python api包装,而python api省略了这个参数并抛出了一个
``icuerror`` python异常。icu api也一样,如果同时使用一个"parseerror"和一个"uerrorcode",它们都将被忽略。例如,"unicodestring&;dateformat::format(const formattable&;,
unicodestring&;,uerrorcode&;)"api,记录在http://icu project.org/apiref/icu4c/classdateformat.html
从python调用,其中:

>;>;来自icu导入日期格式,formattable
>;>;d f=dateformat.createInstance()
>;>;df
<;simpledateformat:m/d/yy h:mm a>;
>;>;f=formattable(940284258.0,formattable.kisdate)
>;>df.format(f)
u'10/18/99 3:04 pm'

从icu导入日期格式
>>>
>>>>>>>>df=dateformat.createinstance;
>>>>>>>>>>>>>>>>>>>>>>>>df
><;simpledataformat:m/d/yy h:mm a>;
>>>
>>
>
>
>
>
>
>
>

>

>

>
>
>>
>
>>>
>>>>>>>
>>>>>
>>>>>>>>
重症监护室使用双盲法e名为"udate"的浮点类型,表示自1970-jan-01 UTC起,日期经过的毫秒数。


在Python中,"time"模块的"time()`
函数返回的值是自1970-jan-01 UTC起的秒数。由于这一差异,当将浮点值传递给采用"udate"的
api时,浮点值将乘以1000,当返回为"udate"时,浮点值将除以1000。

python的"datetime"对象,无论是否带有时区信息,都可以与采用"udate"参数的api一起使用。当跨到C++层时,"日期时间"'BR/>对象被转换为"UDATE"。
BR/>数组> BR/> BR/>许多ICU-API采取数组参数。数组
元素类型的元素列表将从python传递。

/>和返回"unicodestring"对象的"snext()"。
这些方法中的任何一个都可以用作迭代器,使用python内置的"iter"函数。

[s for s in iter(e.unset,none)]is a list of'unicode'objects
[s for s in iter(e.snext,none)]is a list of'unicodestring'objects
`````

timezones

icu``timezone`` type可以用'icutzinfo`` type包装,以便与python的'datetime``类型一起使用。例如::

``python
tz=icutzinfo(time zone.createTimezone('us/mountain')
datetime.now(tz)
````


,或者更简单的是::

``python
tz=icutzinfo.getInstance('pacific/fiji')
datetime.now(tz)
````


``` python
defaulttz=icutzinfo.getdefault()
```

"太平洋/斐济"
```

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用于从服务器到客户端的json通信的公共java类   Java Eclipse启动问题   java如何阻止ActionListener停止所有其他代码?   用户界面点击计数器Java GUI   java如何在RequestParm中将多个值转换为enum?   使用Java ServiceLoader的类路径结果NoTouchElementException错误   带条件的Java重复字符正则表达式   java在mockmvc上执行测试时获取断言错误   java为一个实体使用两个实体管理器   java如何在类中使用2个运行程序   从Java应用程序中使用Fiddler捕获HTTP流量   spring boot如何在java es api中将索引_操作设置为doc   java ADF扫描应用程序:哪个库?   java如何引用充满图像的包   java将通过Arduino串行发送的字符串转换为处理   java在单独的控制台/cmd窗口中显示使用JSch执行的SSH命令的结果,而不是在IDE控制台中