字符集转化/curses

linux字符串转化使用方法

第一步:iconv_open(目标字符集,源字符集)

第二步:iconv()实现字符集转化

第三步:iconv_close()关闭iconv

命令:iconv --list

显示系统中支持的字符集

//makefile

.SUFFIXES: .c .o
CC=gcc
SRCS=mydaemon.c
OBJS=$(SRCS:.c=.o)
EXEC=mydaemon
all: $(OBJS)
    $(CC)  -o $(EXEC) $(OBJS)
    @echo '-------------ok--------------'
.c.o:
    $(CC) -g  -o [email protected] -c $<
clean:
    rm -f $(OBJS)
    rm -f core*

//iconv.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <iconv.h>
int gbk2utf8(char *src, size_t *srclen, char *dest, size_t *destlen)
{
    iconv_t cd = iconv_open("UTF8", "GBK");//源字符串为gbk,目标为utf8
    if (cd ==(iconv_t)-1)
    {
        printf("open iconv error %s\n", strerror(errno));
        return -1;
    }
    size_t rc = iconv(cd, &src, srclen, &dest, destlen);//将src字符串转化为目标dest
    if (rc == (size_t)-1)
    {
        printf("iconv error %s\n", strerror(errno));
        return -1;
    }
    iconv_close(cd);
    return 0;
}
int main(int arg, char *args[])
{
    if (arg < 2)
    {
        printf("Usage: xxx yyy");
        return -1;
    }
    FILE *p = fopen(args[1], "r");
    if (p == NULL)
    {
        printf("open %s error, %s\n", args[1], strerror(errno));
        return -1;
    }
    char buf[1024];//定义一个buffer,存放读取到的文件内容
    char destbuf[1024];//定义一个buffer,存放转化完字符串后的内容
    while(1)
    {
        memset(buf, 0, sizeof(buf));
        memset(destbuf, 0, sizeof(destbuf));
        if (fgets(buf, sizeof(buf), p) == NULL)//读出一行,如果是文件最后一行,循环退出
        {
            break;
        }
        size_t srclen = strlen(buf);
        size_t destlen = sizeof(destbuf);
        gbk2utf8(buf, &srclen, destbuf, &destlen);
        printf("%s\n", destbuf);
    }
    fclose(p);
    return 0;
}

运行:

在windows下面编辑一个文件,将文件传到linux上面之后,cat 文件内容为乱码。

curses是一个在Linux/Unix下广泛应用的图形函数库.

linux下面安装软件的时候,会在屏幕的任意位置输出字符,进行进度的显示。

//makefile

.SUFFIXES: .c .o
CC=gcc
SRCS=curses.c
OBJS=$(SRCS:.c=.o)
EXEC=mydaemon
all: $(OBJS)
    $(CC)  -o $(EXEC) $(OBJS) -lcurses
    @echo '-------------ok--------------'
.c.o:
    $(CC) -g  -o [email protected] -c $<
clean:
    rm -f $(OBJS)
    rm -f core*

//curses.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <curses.h>
int main()
{
    initscr();//开始图形模式
    noecho();//不回显
    char temp[128];
    char s[128];
    int seq = 0;
    while (scanf("%s", s))
    {
        if (strcmp(s, "exit") == 0)
        {
            break;
        }
        clear();//清除屏幕
        sprintf(temp, "please input:");
        mvaddstr(0, 0, temp);//在指定的坐标打印
        int i;
        for (i=0; i<10; i++)
        {
            sprintf(temp, "%s %d %s", s, seq++, s);
            mvaddstr(i+1, 0, temp);
        }
        move(0, 13);//移动光标到指定坐标
        refresh();//刷新屏幕,如果不刷新屏幕,那么mvaddstr和move将不生效
    }
    endwin();//结束图形模式
    return 0;
}

运行:

时间: 2024-08-08 04:50:20

字符集转化/curses的相关文章

oracle服务端与客户端字符集不同导致中文乱码解决方案

1.问题描述 用pl/sql登录时,会提示"数据库字符集(ZHS16GBK)和客户端字符集(2%)是不同的,字符集转化可能会造成不可预期的后果",具体问题是中文乱码,如下图 2.问题分析 不管错误信息中你的数据库字符集是什么,都是由于数据库服务端和你的客户端字符集不统一造成的,所以只要将客户端字符集改为和服务端字符集一致就能解决问题. 3.问题解决步骤 3.1查看服务端字符集 pl/sql里查询 select userenv('language') from dual 3.2查看客户端

python基础系列教程——Python3.x标准模块库目录

python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串准备工具 readline:GNU按行读取接口 rlcompleter:GNU按行读取的实现函数 二进制数据 struct:将字节解析为打包的二进制数据 codecs:注册表与基类的编解码器 数据类型 datetime:基于日期与时间工具

关于编码问题

我们知道在学习php和jsp的时候,出现乱码是经常性的事情,怎样来一劳永逸的解决这个问题,我来做个总结. 首先来了解一下字符集,我们关心的字符集大概有这么几个,iso-8859-1.gb2312.gbk.utf-8,其中iso-8859-1是采用1个字节进行编码,而gb2312和gbk则是在其基础之上使用双字节来对汉字进行编码,而utf-8使用了3个字节编码(实际上是变字节编码,一般2-4个字节),因此它容纳了几乎所有字符,包括中国.日本和韩国的表意字符.这也就不难理解为什么字符集设置错误会导致

Linux 第四天: Linux文件管理

rootfs 根目录文件系统 root filesystemLSB  Linux Standard BaseFHS 文件系统分层结构 Filesystem Hierarchy Standard 蓝色表示 目录绿色表示 可执行文件红色表示 压缩文件浅蓝表示 链接文件灰色表示 其它文件/和NUL外, 所以字符都有效 /boot 引导文件,内核文件(vmlinuz),引导加载器(bootloader,grub)/bin 基本命令/sbin 管理类的基本命令/lib 基本共享库,内核模块文件(/lib/

文本挖掘

文本挖掘介绍 文本挖掘:“自动化或半自动化处理文本的过程”,包含了文档聚类.文档分类.自然语言处理.文本变化分析及网络挖掘等领域内容.对于文本处理过程首先需要有分析的语料(text corpus),然后根据这些语料建立半结构化的文本库(text database).最后生成包含语频的结构化的词条——文档卷着那(term-document matrix). 这个一般性数据结构会被用于后续的分析: 文本分析,比如根据现有的文本分类情况,对未知文本进行归类: 语法分析: 信息提取和修复 文档信息汇总,

[MySQL Reference Manual] 10 全球化

10.全球化 本章主要介绍全球化,包含国际化和本地化,的一些问题: ·         MySQL在语句中支持的字符集 ·         如何为服务配置不同的字符集 ·         选择错误信息的语言 ·         如何设置服务的时区和每个连接的时区 ·         选择本土化的日期和月份名 10.全球化... 1 10.1 字符集的支持... 2 10.1.1 字符集和排序规则... 2 10.1.2 mysql中的字符集和排序规则... 3 10.1.3 制定字符集和排序规则

Sybase数据库技术,数据库恢复---分享Sybase数据库知识(博客文章索引@51cto)

Sybase数据库技术,数据库恢复分享Sybase数据库知识 博客文章列表,更新时间:2014-12-14 Sybase数据库技术,数据库恢复 站点地图 最新文章 ASE使用with ignore_dup_row删除重复数据  (评论 0   阅读 50) ASE 16静默方式安装并创建服务器  (评论 0   阅读 80) ASE执行sp_remotesql报错:Msg 11224, Level 16, State 2  (评论 0   阅读 72) Sybase支持浪潮天梭K1系统  (评论

软件测试 -- SQL注入测试跟JS注入测试

1. SQL注入的概念: 1.1 概念: SQL注入就是将SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行的恶意SQL命令. 1.2 SQL如何产生:  1) WEB开发人员无法保证所有的输入都已经过滤 2) 数据库未做相应的安全配置 3)攻击者利用发送给SQL服务器的输入参数构造可执行的SQL代码 1.3 攻击方式: get请求.post请求.http头信息.cookie等 1.4 如何预防(开发所做): 1) 严格检查输入变量的类型和格式 2) 过滤和转

刨根究底字符编码之十——Unicode字符集的字符编码方式CEF以及码点、码元

Unicode字符集的字符编码方式CEF以及码点.码元 一.字符编码方式CEF的选择 1. 由于Unicode字符集非常大,有些字符的编号(码点值)需要两个或两个以上字节来表示,而要对这样的编号进行编码,也必须使用两个或两个以上字节. 比如,汉字"严"的Unicode码(Unicode码点值.Unicode编号)是十六进制数4E25,转换成二进制数有15位(100 1110 0010 0101),对"严"这个字符的编号进行编码的话,至少需要2个字节.表示其他更大编号