字符集转化/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 $@ -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 $@ -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;
}

运行:

时间: 2025-01-20 21:39:48

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

Oracle数据库字符集和客户端字符集不同,强制转化可能会造成不可预期的后果

Oracle数据库字符集和客户端字符集不同,强制转化可能会造成不可预期的后果 用PL/SQL Developer登陆Oracle数据库,输入用户名和密码后报:数据库字符集(AL32UTF8)和客户端字符集(2%)是不同的,字符集转化可能会造成不可预期的后果. 解决: windows  regedit HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\ 找到这个 双击 NLS_LANG 使值为 american_america.AL32UTF8 右击电脑属性  新

PHP实现任意字符集下正常显示网页的方法

通常情况下,我们的网页要指定一个编码字符集,如 GB2312.UTF-8.ISO-8859-1 等,这样我们就可以在网页上显示我们指定编码的文字了.但是我们很可能会遇到这种情况,那就是我们可能希望在 ISO-8859-1 编码的网页上显示汉字,或者在 GB2312 编码的网页上显示韩文等.当然一种解决办法就是我们不用 ISO-8859-1 或者 GB2312 编码,而统统都采用 UTF-8 编码,这样我们只要在这种编码下,就可以混合显示各国文字了,这是现在很多网站采用的方法. 而我这里所说的并非

任意字符集下正常显示网页

通常情况下,我们的网页要指定一个编码字符集,如 GB2312.UTF-8.ISO-8859-1 等,这样我们就可以在网页上显示我们指定编码的文字了.但是我们很可能会遇到这种情况,那就是我们可能希望在 ISO-8859-1 编码的网页上显示汉字,或者在 GB2312 编码的网页上显示韩文等.当然一种解决办法就是我们不用 ISO-8859-1 或者 GB2312 编码,而统统都采用 UTF-8 编码,这样我们只要在这种编码下,就可以混合显示各国文字了,这是现在很多网站采用的方法. 而我这里所说的并非

oracle中修改服务端字符集所导致的ORA-12712错误

今天一台测试机器的oracle服务端,在测试人员建库的时候字符集设置成了WE8MSWIN1252字符集,导致无法保存俄文等其他国家语言. 于是我建议测试将字符集修改为AL32UTF8. 首先查看服务端字符集 select * from v$nls_parameters where parameter = 'NLS_CHARACTERSET' NLS_CHARACTERSET WE8MSWIN1252 然后用sys用户进行修改 #sqlplus "/as sysdba" >shut

在任意字符集下正常显示网页的方法二(续)_php技巧

转:coolcode.cn 前几天写了一篇在任意字符集下正常显示网页的方法,里面介绍的很简单,就是把前128个字符以外的字符集都用 NCR 来表示,但是具体怎么转化我没有介绍,因为当时我觉得太简单了.但是后来发现有人问这个问题,这里就详细说明一下. 首先第一步是要把源字符集的字符串转化为 UTF-16 字符集,做这一步是因为 UTF-16 字符集中的每个字符都是两个字节,后面处理起来很容易,而如果在源字符集上直接做处理则很复杂.源字符集可以从原网页中的 meta 标签中获得,也可以单独指定,我的

[20130106]整和数据库--修改字符集.txt

[20130106]整和数据库--修改字符集.txt 工作需要,需要把几个数据库合并在一起,由于以前数据库使用的字符集是AMERICAN_AMERICA.US7ASCII,而现在的数据库使用SIMPLIFIED CHINESE_CHINA.ZHS16GBK,整合的时候需要修改字符集,统一到字符集SIMPLIFIED CHINESE_CHINA.ZHS16GBK. 自己google看了一些blog和文档,最终选择这个方式,自己做一个记录:英文字符集转化到中文字符集.当然这个转化的前提条件是应用表中

Java 编程要点之 I/O 流详解

本文详细介绍了 Java I/O 流的基础用法和原理. 字节流(Byte Streams) 字节流处理原始的二进制数据 I/O.输入输出的是8位字节,相关的类为 InputStream 和 OutputStream. 字节流的类有许多.为了演示字节流的工作,我们将重点放在文件 I/O字节流 FileInputStream 和 FileOutputStream 上.其他种类的字节流用法类似,主要区别在于它们构造的方式,大家可以举一反三. 用法 下面一例子 CopyBytes, 从 xanadu.t

lftp,gFTP和virgoFTP中文文件名乱码解决方案

今天风信网带大家来了解一下linux中FTP服务经常遇到的中文文件名乱码问题,主要针对三种常用的FTP程序来解决,分别是lftp,gFTP和virgoFTP. lftp官方:http://lftp.yar.ru/ 源码包下载地址如下: lftp-4.4.0.tar.gz (2429 kB), lftp-4.4.0.tar.bz2 (1813 kB), lftp-4.4.0.tar.xz (1395 kB) (Yaroslavl, Russia) LFTP是一款非常著名的字符界面的文件传输工具.支

网络安全:捕包只能捕获单向数据流???急

问题描述 各位朋友:我学习捕包解析http协议.基本配置如下:各位请详细解析,最好拿出例子.我是初学者,很笨.fedora9linuxlibnidslibpcaplibnetgcc编译器问题一:在应用层用libnids捕获http数据流,但是,只能捕获到服务器发给我的响应信息,而我的客户端发给服务器的请求报文却不能捕获.我不知道这是为什么??具体编码如下:(见问题后面):问题二:参见http协议内容.charset字符集:我如何将字符集转换,比如实体内容如果为汉语,我解析出来printf为乱码,