GNU IDN库-Libidn


介绍

GNU Libidn是Stringprep的一个有完整文档记录的实现,Punycode和IDNA 2003规范。Libidn的目的是编码和解码国际化域名。本机C、C#和Java库在GNU Lesser General Public License下可用2.1版或更高版本。

请注意GNU库ID 2是GNU libidn的继承者。它附带IDNA 2008和TR46实现,还提供GNU libidn的兼容层。

该库包含通用Stringprep实现。配置文件对于Nameprep,包括iSCSI、SASL、XMPP和Kerberos V5。支持通过IDNA的Punycode和ASCII兼容编码(ACE)。定义顶级域(TLD)特定验证的机制表,并将字符串与这些表进行比较。还包括一些TLD的默认表。

Stringprep API由两个主要函数组成,一个用于转换数据从系统的本机表示转换为UTF-8函数执行Stringprep处理。添加新的API中应用程序的Stringprep配置文件是简单明了。Punycode API由一个编码函数组成和一个解码功能。IDNA API由ToASCII和ToUnicode函数,以及用于转换的高级接口ACE编码形式的完整域名。TLD API由一组函数组成,用于从域中提取TLD名称字符串,一组函数,用于定位要使用的正确TLD表基于TLD名称和用于验证字符串的核心函数一个TLD表和一些实用程序包装器,用于在一个表中执行所有步骤呼叫。

该库由GNU SASL和Shishi等使用来处理用户名称和密码。Libidn可以内置到GNU Libc中,以启用用于IDN处理的新系统范围getaddrinfo标志。

Libidn是为GNU/Linux系统开发的,但运行在20多个Unix上平台(包括Solaris、IRIX、AIX和Tru64)和Windows。这个库是用C编写的,API的(部分)也可以从C++、Emacs Lisp、Python和Java。本机Java和C#端口是包括。

还包括一个命令行工具、几个自检、代码示例等,所有这些都是根据GNU通用公共许可证授权的3.0或更高版本。

目录


新闻

请注意,只有在新版本引入主要特征或在其他方面具有重要意义。阅读这个帮助-利宾如果您更频繁地查找邮件列表公告。

有关图书馆自身新增内容的信息,请参阅这个新闻文件(实时版本)。

试试看

libidn的web界面在线可用。购买前请试用libidn。

一个简单的IDN网站服务器也可以使用。

文档

请参阅Libidn手册链接的网页所有格式的手册;然而,快速链接到流行格式:

您可能还对初步文件使用Nameprep和IDNA测试向量.

另请参阅各种标准文本:

正在下载

Libidn可以在上找到网址:https://ftp.gnu.org/gnu/libidn/[通过HTTPS]和ftp://ftp.gnu.org/gnu/libidn/[通过FTP]。它也可以在一个属于我们的FTP镜像; 请用镜子如果可能的话。

所有官方发布都与一个OpenPGP密钥指纹0xB565716F或使用OpenPGP键0x08302DB6A2670428。

支持

存在Libidn用户可以互相帮助的邮件列表,以及你可以通过发送电子邮件联系到它help-libidn@gnu.org帮助.邮件列表讨论的存档和管理界面订阅,可通过万维网访问https://lists.gnu.org/mailman/listinfo/help-libidn.

如果您对Libidn的付费支持感兴趣,或赞助请开发一下接触。如果您为Libidn提供付费服务,并且希望在这里也提到接触.

如果你觉得Libidn有用,请考虑捐款。金额太小!

开发

大草原利比登项目页面。可以结账来源通过使用吉特作为跟随:

$git克隆git://git.savannah.gnu.org/libidn.git

这个联机git接口可用。

对于每个版本,我们都会发布圈码复杂性图表用于包。自检代码覆盖图可用。最后,叮当声分析器输出也可用。

漏洞

报告所有问题bug-libidn@gnu.org程序,但是请阅读手册如何报告错误第一。

相关实施

以下是指向其他免费IDN或其他内容的链接列表相关,实现。列表不是结论性的,建议非常感谢。

使用GNU Libidn的项目包括:

使用libidn2的项目包括:

让我们一起知道关于更多使用GNU Libidn的项目!

如何使用?

从用户处读取数据,将其转换为UTF-8,然后将其传递给stringprep()。下面的示例代码(包含在以分布为例。c)。为了简化编译,使用libtool(库工具)pkg配置.中包含了更多信息和示例这个手册.

另请参阅上的源发行版中的其他示例*.c文件如何使用库的其他功能(punycode,IDNA)。

#包括<stdio.h>#包括<stdlib.h>#包括<string.h>/**建议使用libtool和pkg-config进行编译:**$libtool cc-o示例.c`pkg-config--cflags--libs libidn`*美元/例子*编码为“ISO-8859-1”的输入字符串:ª*在locale2utf8之前(长度2):aa 0a*字符串rep之前(长度3):c2 aa 0a*stringprep后(长度2):610a* $**/int main(int argc,char*argv[]){字符buf[BUFSIZ];字符*p;整数rc,i;printf(“输入字符串编码为“%s”:”,字符串rep_locale_charset());fflush(标准输出);fgets(buf、BUFSIZ、stdin);printf(“在locale2utf8之前(长度%d):”,strlen(buf));对于(i=0;i<strlen(buf));i++)打印(“%02x”,buf[i]&0xFF);printf(“\n”);p=字符串rep_locale_to_utf8(buf);如果(p){strcpy(buf,p);自由(p);}其他的printf(“无法将字符串转换为UTF-8,仍在继续…\n”);printf(“在stringprep之前(长度%d):”,strlen(buf));对于(i=0;i<strlen(buf));i++)打印(“%02x”,buf[i]&0xFF);printf(“\n”);rc=stringprep(buf,BUFSIZ,0,stringprep_nameprep);if(rc!=字符串PREP_OK)printf(“Stringprep失败,rc%d…\n”,rc);其他的{printf(“字符串rep(长度%d)之后:”,strlen(buf));对于(i=0;i<strlen(buf));i++)打印(“%02x”,buf[i]&0xFF);printf(“\n”);}返回0;}

图书馆2

Libidn2是IDNA2008+TR46规范的实现(副本请求5890,副本请求5891,副本请求5892,副本请求5893,信托收据46). Libidn2是一个独立的库,不依赖于利比登。Libidn2被认为是一个完整的IDNA2008/TR46实现,但尚未像原始Libidn库。

Libidn2使用GNU(全球导航单元)libunistring(自由字符串)用于Unicode处理GNU libiconv用于字符集转换。

Libidn2可以从下载网址:https://ftp.gnu.org/gnu/libidn/[通过HTTPS]和ftp://ftp.gnu.org/gnu/libidn/[通过FTP]。它也可以在一个属于我们的FTP镜像; 请用镜子如果可能的话。

有关文档,请参阅图书馆2手动网页,但可以快速链接到最流行的格式:

有关开发,请参阅这个Libidn2 GitLab项目页面.

为了保证质量,我们出版代码覆盖范围报告叮当作响静态分析仪输出.

Libidn2的初步开发已获得赞助通过DENIC公司.


有效的XHTML 1.0严格