Python扩展包括ICU C++API

PyICU-binar的Python项目详细描述


PyICU的自述文件
BR/><欢迎
BR/>欢迎Pycu,Python扩展包ICU C++库。< BR/>< BR/> ICU代表"Unicode的国际组件"。
它的许多配套Unicode技术标准,
和大部分unicode cldr。


icu主页是http://site.icu project.org/


必须建立并安装icu库。有关详细信息,请参阅每个系统的说明。


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

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

-windows
确保"path"包含指向目录的路径
包含ICU DLL。



ICU的API被记录在
用于从C++ API到相应的Python API。
BR/>字符串> BR/> BR/> ICU字符串类型,"UnoDeString",是指向"uchar"unicode 16位宽字符的可变
数组的类型。python unicode类型是由16位或32位宽的unicode字符组成的不可变字符串。

'UnicoDeScord'和Python’'Unicode’'BR/>类型在跨越C++边界时不被合并到同一类型中。
ICU API将"UnicoDeStord'"参数重载到
接受Python STR或Unicode类型参数。在"str`
对象的情况下,当将它们转换为
"unicodestring``对象"时,假定为"utf-8``编码。

若要将以"utf-8``以外的编码编码编码的python``str`转换为
icu`` unicodestring``使用"unicodestring(str,'Br/>构造函数。
BR/> ICU的C++ API在几个
方式中接受并返回"UnoDeStord'"参数:按值、指针或引用。
当ICU C++ API被记录为接受"UnoDeSoScess"引用< BR/>参数时,可以安全地假设有几个。相应的
pyicu python api使其以更简单的方式访问:

例如,
``` unicodestring&;locale::getdisplayname(unicodestring&;)`` api,
http://icu project.org/apiref/icu4c/classlocale.html上的文档
可以通过多种方式从python调用:

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

2。python方式;>;>from icu import locale
>;>locale=locale('pt_br')
>;>name=locale.getdisplayname()
>;>gt;name
u'葡萄牙语(巴西)

a``unicode string``对象已分配并转换为python
``unicode``对象。

a unicodestring可以使用python的
``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>;
>;>;name[12:18]="巴西的国家"
>;>;name
<;unicodestring:葡萄牙语(巴西的国家)>;
>;>;name+="噢joy"
>;>;name
<;unicodestring:葡萄牙语(巴西的国家)噢joy>;

错误报告

c++icu库不使用c++异常报告错误。icu
c++api通过"uerrorcode"引用参数返回错误。所有这些
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 import dateformat,formattable
>;>;df=dateformat.createinstance()
>;>;df
<;simpledataformat:m/d/yy h:mm a>;
>;>f=formattable(940284258.0,formattable.kisdate)
>;>df.format(f)
u'10/18/99 3:04 pm'

)'``这里有文档:
http://icu project.org/apiref/icu4c/classdateformat.html
也可以使用:

>>>>from icu import dateformat
>;df=dateformat.createInstance()
>;df
<;simpleDateformat:m/d/yy h:mm a>;
>;>;df.format(940284258.0)
u'10/18/99 3:04 pm'


\dates


python中,"time"模块的"time()``
函数返回的值是自1970年1月1日UTC以来的秒数。由于这一差异,当将浮点值传递给采用"udate"的
api时,浮点值将乘以1000,当返回为"udate"时,浮点值将除以1000。

python的"datetime"对象,无论是否带有时区信息,也可以与采用"udate"参数的api一起使用。当进入c++层时,``datetime`
对象被转换成``udate`'。


\arrays

许多icu api都采用数组参数。数组
元素类型的元素列表将从python传递。

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

设"e"为"stringEnumeration"实例:

``python
[s for s in e]为"str"对象列表
[s for s in iter(e.unset,none)]为"unicode"对象列表
[s for s in iter(e.snext,none)]为"unicodestring"对象列表icu ``timezone``类型可以用``icutzinfo``类型包装,以便
与python的``datetime``类型一起使用。例如:

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

更简单的是:

``python
tz=icutzinfo.getInstance('Pacific/Fiji')
DateTime.now(tz)
`````


``python使用:
``python
``defaulttz=icutzinfo.get default()
````

使用"tzid"属性或将时间
区域强制为字符串::

``python
icutzinfo.getInstance('pacific/fiji').tzid->;'pacific/fiji'
str(icutzinfo.getInstance('pacific/fiji')->;'pacific/fiji'
``


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

推荐PyPI第三方库


热门话题
无法在Netbeans 8.2 JDK8u231中创建java Maven项目(Web应用程序)   java如何以设定的时间间隔生成随机数?   java从socket和inputStream的慢速读取   spring SCORM:Java中基于Web的SCORM播放器   Java将函数传递给方法   java绑定通用服务及其实现和子类型   java如何在运行时从选择列表框中动态选择选项?爪哇硒   java Selenium WebDriver什么是“Selenium客户端和WebDriver语言绑定”   elasticsearch需要elasticsearch高级Java客户端更新ByQueryRequest API帮助   JAVA哈希表查找最大值   WSDL操作中的java soapAction属性为空   java访问封闭类或父类方法的一般方法   eclipse在java中运行带有SeleneTestCase的ANT。lang.NoClassDefFoundError   java Hazelcast不会在节点启动时填充ReplicatedMap   如何在Java中从excel中读取特定行?   html JAVA将本地时间(GMT+8)转换为UTC时间   java将自定义端点添加到Spring数据REST存储库中,并以大摇大摆的方式显示   java计算未来位置