跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11.1 国际语言环境指南 Oracle Solaris 11.1 Information Library (简体中文) |
对代码集转换或字符集 (charset) 转换的支持是操作系统的重要部分,因为大多数应用程序都依赖于此功能才能正常运行。
Oracle Solaris 的当前发行版还包括 International Components for Unicode (ICU),后者是广泛用于 Unicode 支持、软件国际化和软件全球化的库和工具。
Oracle Solaris 11 包括用于代码集转换的各种工具和库。核心代码集转换实用程序 iconv 基于 Oracle Solaris libc 中的 iconv 库而构建。
iconv(1) 命令行实用程序可将字符或字符序列从一种代码集转换为另一种代码集。它支持各种代码集。由于各平台之间代码集名称通常会不同,借助 iconv 的别名机制,许多代码集支持使用多个名称。运行以下命令可获取系统中当前可用的代码集列表:
$ /usr/bin/iconv -l
由于多个软件包有 iconv 模块,因此可以通过安装其他软件包来扩展缺省列表。缺省安装包括 system/library/iconv/utf-8 软件包,后者含有 iconv 模块的基本集,用于在 UTF-8 与其他 Unicode 代码集和所选定其他代码集之间进行转换。软件包管理器的系统/国际化类别中提供了其他软件包,也可以使用 system/library/iconv/* 名称模式通过 pkg(1) 命令来安装这些软件包。
iconv —f 选项定义源代码集,-t 选项定义目标代码集。可以使用 iconv 按如下所示将文件或标准输入转换为标准输出:
$ /usr/bin/iconv -f eucJP -t UTF-8 file.txt
此示例将 file.txt 文件名从 eucJP 代码集(针对日文的扩展 UNIX 代码包格式)转换为 UTF-8 代码集,并将结果写入标准输出。
在 Oracle Solaris 11 中,iconv 已扩展为包括多种标志,这些标志用于在以下特殊情况下修改转换行为:
非法字符-输入字符在声明的源代码集中无效
非相同字符-目标代码集中不存在匹配字符
此外,也可在命令行上使用 //ILLEGAL_DISCARD、//NON_IDENTICAL_DISCARD、//IGNORE 和 //TRANSLIT 等标志。有关更多信息,请参见 iconv_open(3C) 手册页。
有关 iconv 的更多信息,请参见 iconv(1)、iconv(3C)、iconv_open(3C) 和相关手册页。
Oracle Solaris 11 将 International Components for Unicode (ICU) C/C++ 库添加到了可用接口中。ICU 是成熟的、广泛使用的库集,为软件应用程序提供 Unicode 和全球化支持。ICU 是可移植的,在所有平台上以及在 C/C++ 与 Java 软件之间为应用程序提供相同结果。
ICU 提供的一些服务包括:
代码页转换-在文本数据与 Unicode 以及几乎任何其他字符集或编码之间进行转换。
整理-根据特定语言、地区或国家的习惯和标准来比较字符串。
格式化-根据所选语言环境设置数字、日期、时间和货币金额的格式。
时间计算-提供了多种类型的日历和全面的时区计算 API 集。
Unicode 支持-ICU 紧密跟踪 Unicode 标准,从而方便访问众多 Unicode 字符属性、Unicode 标准化、大写转换 (case folding) 和 Unicode 标准指定的其他基本操作。
正则表达式-ICU 正则表达式完全支持 Unicode,同时提供非常有竞争力的性能。
双向文本 (Bidi)-支持处理包含从左向右书写和从右向左书写的混合数据的文本。
文本边界-定位词、句子和段落在一系列文本中的位置,或者确定在显示文本时将适合换行的位置。
Oracle Solaris 11 中的 ICU 划分为两个软件包:一个是 library/icu,它仅包含各个库;另一个是 developer/icu,它提供头文件和多个实用程序,例如 uconv(1)。
有关更多信息,请参见项目的 Web 站点 http://site.icu-project.org。libicui18n(3LIB)、libicuio(3LIB)、libicudata (3LIB)、libicule(3LIB)、libiculx(3LIB)、libicutu (3LIB) 和 libicuuc(3LIB) 手册页说明如何使用 Oracle Solaris 中的库。
除 iconv(1) 之外,属于 International Components for Unicode (ICU) 工具集的 uconv(1) 命令也可用于将文本从一种编码转换为另一种编码。uconv 支持 229 种编码以及超过 1000 个别名。
该工具属于缺省情况下未安装的 developer/icu 软件包。要安装该工具,请发出以下命令:
# pkg install developer/icu
要将采用 cp-1252 编码的文本转换为 UTF-8 编码,可键入:
$ uconv -f cp1252 -t UTF-8 -o file_in_utf8.txt file_in_cp1252_encoding.txt
uconv 的另一种功能是音译-将字母从一种书写体转换为另一种书写体,而不翻译基础单词。下面的示例将一段希腊文字转换为拉丁字符:
$ echo “Σολαρις”| uconv -x Greek-Latin -f utf-8 -t utf-8 Solaris
有关此工具的功能的更多信息,请参见 uconv(1) 手册页。
通过文件编码检查器 fsexam 实用程序,可以将文件名或纯文本文件的内容从传统字符编码转换为 UTF-8 编码。fsexam 实用程序包括以下新功能:
编码列表定制
编码自动检测
支持预运行、日志文件、批量转换、文件筛选、符号文件、命令行和特殊文件类型(如压缩文件)。
要将 fsexam 添加到系统中,请安装 storage/fsexam 软件包。有关更多信息,请参见 fsexam (1) 和 fsexam(4) 手册页。
Oracle Solaris 包含 auto_ef(1),后者是用于确定文件编码的一个命令行实用程序。auto_ef 使用 iconv 代码转换来判断编码,从而确定对文件进行的特定代码转换是否成功。此外,它还对文件中显示的字符序列执行频率分析。例如,
$ auto_ef test_file eucJP
使用 -a 选项,将显示给定文件的所有可能编码:
$ auto_ef -a test_file eucJP 0.89 zh_CN.euc 0.40 ko_KR.euc 0.01
要将 auto_ef 添加到系统中,请安装 text/auto_ef 软件包。有关更多信息,请参见 auto_ef(1) 手册页。