libc库中可用于代码转换的iconv()函数如下:

iconv_open()

代码转换分配功能

代码转换功能

iconv_close()

代码转换取消分配功能

iconvctl()

控制和查询代码转换行为

iconvstr()

基于字符串的代码转换功能

The

iconv函数将一个字符或一系列字符从一个代码集转换为另一代码集. iconv_open()函数支持各种代码集. 您可以通过运行以下命令来显示有关系统上当前可用的受支持代码集及其别名的信息:

$ iconv -l

由于iconv模块分为多个软件包,因此可以通过安装其他软件包来扩展可用转换的默认列表. 默认安装包括system / library / iconv / utf-8软件包,其中包含基本的iconv模块集,可以在UTF-8,Unicode和其他选定的代码集之间转换.

您可以使用“程序包管理器”应用程序或pkg命令来安装其他程序包. 如果使用软件包管理器进行安装,则“系统/国际化”类别中将提供其他软件包. 如果使用pkg命令,请使用系统/库/ iconv / *名称模式进行安装.

iconv转换模块的格式为fromcode%tocode.so,并且必须存在于/ usr / lib / iconv目录中的iconv模块库中,iconv函数才能使用它们. 因此,您不能在iconv -l命令列出的任何两个代码集之间进行转换. 当所有iconv软件包都已安装且所需的模块不可用时,可以使用Unicode编码(例如UTF-32)作为中间代码集来执行两步转换. 或者,您可以开发自定义转换模块. 要创建自定义iconv转换模块,请使用geniconvtbl实用程序. 有关geniconvtbl实用程序的输入文件格式的信息,请参见geniconvtbl(4)手册页.

示例2-9使用iconv_open()创建转换描述符

以下代码段显示了如何使用iconv_open()函数将字符串złoty(波兰货币)从单字节ISO 8859-2代码集转换为UTF-8. 要使用iconv函数执行转换,您需要创建一个转换描述符并调用iconv_open()函数,并验证此调用是否成功.

#include

#include

iconv_t cd;

:

cd = iconv_open("UTF-8", "ISO8859-2");

if (cd == (iconv_t)-1) {

(void) fprintf(stderr, "iconv_open() failed");

return(1);

}

目标代码集是iconv_open()函数的第一个参数.

示例2-10使用iconv()进行转换

以下代码段说明了如何使用iconv()函数将一个代码集转换为另一代码集.

在实际转换之前iconv函数库,需要准备一些变量来保存iconv调用返回的信息,例如输出缓冲区iconv函数库,输入和输出缓冲区中剩余的字节数等等.

在ISO 8859-2代码集中,L WITH STROKE字符以十六进制表示为0xB3. 因此,将保存输入字符串的输入缓冲区(inbuf)设置为z \ xB3oty. inbuf的内容将是读取流或文件的结果.

#include

#include

#include

:

int ret;

char *inbuf;

size_t inbytesleft, outbytesleft;

char outbuf[BUFSIZ];

char *outbuf_p;

inbuf = "z\xB3oty";

inbytesleft = 5; /* the size of the input string */

输出缓冲区至少需要6个字节才能保存转换后的字符串. 可以将L WITH STROKE字符转换为Unicode字符拉丁小写字母L WITH STROKE,可以将其表示为UTF-8中的双字节序列0xC5 0x82.

由于在大多数情况下,转换前生成的字符串的实际大小是未知的,因此请确保为输出缓冲区分配足够的额外空间. 在这种情况下,在stdio.h中定义BUFSIZ宏就足够了.

outbytesleft = BUFSIZ;

outbuf_p = outbuf;

此转换调用使用上一个示例中的转换描述符cd.

ret = iconv(cd, &inbuf, &inbytesleft, &outbuf_p, &outbytesleft);

在调用iconv之后,您需要检查此调用是否成功. 如果调用成功,但输出缓冲区中仍有空间,则需要以空字符终止字符串.

if (ret != (size_t)-1) {

if (outbytesleft == 0) {

/* Cannot terminate outbuf as a character string; error return */

return (-1);

}

/* success */

*outbuf_p = '\0';

:

}

如果调用成功,则outbuf将在UTF-8代码集中\ x7a \ xc5 \ x82 \ x6f \ x74 \ x79或z \ xc5 \ x82oty中包含此字符串的十六进制表示. 现在,inbuf将指向转换后的字符串的末尾. inbytesleft将为0. outbytesleft将减少6,该数字是放入输出缓冲区的字节数. outbuf_p将指向outbuf中输出字符串的末尾.

如果调用失败,请检查errno值以处理错误情况,如以下代码片段所示:

if (ret != (size_t)-1)) {

if (errno == EILSEQ) {

/* Input conversion stopped due to an input byte that

* does not belong to the input codeset.

*/

:

} else if (errno == E2BIG) {

/* Input conversion stopped due to lack of space in

* the output buffer.

*/

:

} else if (errno == EINVAL) {

/* Input conversion stopped due to an incomplete

* character or shift sequence at the end of the

* input buffer.

*/

:

}

}

最后,取消分配转换描述符及其所有关联的内存.

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-228192-1.html

oracle 国际化时间,Oracle Solaris中的应用程序国际化和本地化相关推荐

  1. 在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 在内建了身份认证应用程序服务之 ...

  2. 在ASP.NET AJAX中使用应用程序服务和本地化(4):示例程序:读取、修改并保存用户个性化信息...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 让我们通过编写一个完整的示例程 ...

  3. 在ASP.NET AJAX中使用应用程序服务和本地化(5):自定义应用程序服务的服务器端实现...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第五章<应用程序服务和本地化>. 身份认证与用户个性化等应用程序 ...

  4. 调整oracle服务器时间,oracle数据库因一次服务器时间调整引发的实例宕机注意事项及解决方案...

    详情: 问题描述: 1. 数据库实例突然crash,原因是ASMB有200多秒没有响应: Mon Sep 04 15:07:47 2017 WARNING: ASMB has not responde ...

  5. oracle am时间,oracle里to_date()如何转换am、pm时间

    oracle里to_date()怎么转换am.pm时间? TRUNC(TO_DATE('24-Nov-1999 08:00 pm'),'dd-mon-yyyy hh:mi am') ='24-Nov- ...

  6. oracle中时间差转秒,oracle计算时间秒数差

    --计算plsql处理时间差 --qzq declare time1 timestamp; --开始时间 time2 timestamp; --结束时间 sum1 number(9); --时间差(s ...

  7. oracle 截取时间至小时,Oracle中获取系统当前时间 和 进行时间间隔操作

    原文转载至:http://blog.sina.com.cn/s/blog_4ce36a780101b1rl.html 以 年-月-日 时:分:秒 格式获取当前数据库系统时间: select to_ch ...

  8. oracle中插曲时间,Oracle 11G 数据库迁移【expdp/impdp】

    0x01 环境 A 机器,操作系统 CentOS7.3,Oracle版本:11G,IP地址:192.168.1.11 B 机器,操作系统 CentOS7.3,Oracle版本:11G,IP地址:192 ...

  9. oracle 日期 extract,ORACLE——EXTRACT() 截取日期时间的函数使用

    1.截取日期的 年: --使用方法 EXTRACT(YEAR FROM DATE) SQL> SELECT EXTRACT( YEAR FROM SYSDATE ) FROM DUAL; --结 ...

最新文章

  1. 当你收到面试通知后,如下的准备可以大大提升面试成功率
  2. MongoDB同步到Oracle,MongoToOracleMongoDB数据库迁移工具
  3. python 日志不会按照日期分割_python日志切割保留一个月
  4. linux userdel删除用户命令
  5. 递归求1到100的和算法演示
  6. 快讯:2019 OOW 文档已提供下载
  7. centos7全盘备份到本地_CentOS7 系统盘迁移案例【大硬盘迁移到小硬盘,新思路】...
  8. python面试如何以相反顺序展示一个文件的内容?
  9. linux cpu 没有内核,linux – 如何获得无内核的工作? nohz_full,rcu_nocbs,isolcpus还有什么?...
  10. python网课推荐-python网课什么平台好
  11. Node.js模块化开发(非常详细,满满的干货)
  12. 锁机制有什么用?简述Hibernate的悲观锁和乐观锁机制
  13. assert()和panic()
  14. bt种子php啥格式的,bt种子是什么意思(bt种子的格式及文件结构)
  15. 模拟集成电路—拉扎维第三章知识点
  16. 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(21):常用方阵函数的一些性质
  17. luogu4093 序列 (cdq分治优化dp)
  18. 初识小熊派——小熊派硬件分析
  19. Dissect RB-Tree
  20. OPENCV C++保存视频

热门文章

  1. 残差 Gabor 卷积网络和 FV-Mix 指数级数据增强策略用于手指静脉识别
  2. 华为自带浏览器兼容性总结其一
  3. 2017最新Givenchy纪梵希官网小白鞋,非常经典又百搭,实体店爆款!
  4. Python常用函数练习题
  5. [文摘20080731]小破孩的婚姻
  6. planning ADSO/aggregation level的计划功能
  7. mysql workbench 闪电_Mysql workbench
  8. 组合预测模型 | ARIMA-LSTM时间序列预测(Python)
  9. linux 将当前时间往后调整2分钟_linux调整系统时间
  10. 【计组】简单理解集中式刷新、分散式刷新、异步式刷新