linux c字符串转utf-8,linux C 语言如何遍历 utf-8字符

2023-05-16

加入文件是utf-8编码,内容如下:

我是来自上海的互联网程序员,主要从事Web/游戏/手机服务器开发.

下面C代码可以一个一个的读入这些中文字符():

#define UTF8_CHAR_LEN( byte ) ((( 0xE5000000 >> (( byte >> 3 ) & 0x1e )) & 3 ) + 1)

char content[255]; //一行一行的读入文件,255的话大概满足需求了;这个代码片段也只是测试用.

FILE *data_file = fopen("path/to/file", "r");

if (!data_file) {

fprintf(stderr, "error happened when read file: %s","path/to/file");

return -1;

}

fgets(content, 255, data_file);

int i;

for (i = 0; content[i] != '\0'; i++) {

int utf8_char_len = UTF8_CHAR_LEN(content[i]);

if (utf8_char_len > 1) {

char word[4]; // utf-8占位最大字节也就是4个字节

memcpy(word, (content + i), utf8_char_len);

i += utf8_char_len - 1;

printf("%s\t", word);

}

else {

printf("%c\t", content[i]);

}

}

fclose(data_file);

输入:

我 是 来 自 上 海 的 互 联 网 程 序 员 , 主 要 从事 W e b / 游 戏 / 手 机 服 务 器 开 发 .

这里我觉得主要问题是字符指针它不标识出编码字符的大小,如果单纯的用 (p + 1)的话会把编码混乱掉,所以要先判断字符编码的所占字节数,然后再 (p + sizeofword) 输出;

上面的代码满足我现在的需求,不过还有一些疑问;

utf-8编码的字符在Linux c 下面怎么处理的呢?一般模式我还在寻找,有机会帖在这里.

这里还帖一个用宽字符库遍历utf-8字符串的代码片段:

wchar_t wstr[] = L"你好";

// en_US.UTF-8 是我本地的locale

setlocale(LC_ALL, "en_US.UTF-8");

int i;

for (i = 9; i < wcslen(wstr); i++) {

wprintf(L"%lc\n", wstr[i]);

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux c字符串转utf-8,linux C 语言如何遍历 utf-8字符 的相关文章

  • AD绘制四层板

    原理图导入PCB后 默认是双层板 可以Design gt Layer Stack Manager 点击Top Layer 然后点击Add Plane 负片层 电脑上在此层走线表示把铜挖空 这里把一整层都当作GND 非GND的过孔打到这一层
  • 群晖(Synology)配置 NAS + 软路由

    文章目录 背景结论软路由配置 背景 老板上周兴致勃勃的找到我 说Macbook存储不够用了 帮他找个存东西的 不是移动硬盘 我也很懵逼 我搞活动捡便宜充的百度网盘超级会员 觉得自己很是尾巴翘上天的土豪了 但想到老板的身价 又不太清楚macb
  • 各种类型的Writable

    各种类型的Writable xff08 Text ByteWritable NullWritable ObjectWritable GenericWritable ArrayWritable MapWritable SortedMapWri
  • C++ strtok的用法

    size 61 large align 61 center strtok的用法 align size 函数原型 xff1a char strtok char s char delim 函数功能 xff1a 把字符串s按照字符串delim进行
  • 读《遇见未知的自己》笔记

    为什么我不快乐 xff1f 为什么我不能拥有自己想要的生活 xff1f 此刻屏幕前的你 是否想过 xff0c 自己为什么会出现这种情况呢 xff1f 张德芬在 遇见未知的自己 一书给出了解释 xff1a 我们人类所有受苦的根源就是来自不清楚
  • PX4飞控问题汇总

    接触PX4飞控代码一年多了 xff0c 代码都是模块化 开发起来比APM的方便 xff0c 使用过程中也出现过各种怪异问题 xff0c 用的硬件是V5 nano 和V5 43 xff0c 测试的代码版本是1 9和1 10 今天总结一下遇到过
  • Sumo 搭建交叉路口交通流仿真平台

    Sumo安装 注意事项 xff1a 需要工具的使用需要环境变量的设置 需要包含文件Sumo安装路径下的bin和tools Sumo配置文件 Sumo中项目的配置文件的组成如下所示 节点文件 图 1 节点及边的拓扑图 Node的属性主要有id
  • OpenWRT 各种烧录方式及量产(三)

    界面烧录 不更新uboot 电脑连接WIFI xff08 或者通过网线连接电脑与路由器 xff09 通过浏览器访问路由器管理界面 xff0c 进行升级 注意不要断电 xff01 xff01 xff01 xff08 断电只能通过tftp方式恢
  • 华为手机root

    首先手机已解锁 xff42 xff4c 此方法针对 华为手机 可使用 xff0c 其他手机没有测试 xff0c 但应该也可以 官方的twrp没有对mate xff19 进行配适 xff0c 可以使用奇兔 twrp 提取码 ax6d 如果你没
  • 阿里云ubuntu 16.04 Server配置方案 2 远程控制桌面

    通过远程控制 xff0c 更好的管理服务器 1 XRDP远程控制 为了更好的远程管理 xff0c linux一般情况都用VNC进行远程连接 xff0c 如 TightVNC X11VNC ReadVNC等 Xrdp 是开放原始码的远端桌面通
  • 自顶向下(top down)简介

    无论是在实际生活中还是在学术问题上 xff0c 复杂的问题比比皆是 xff0c 当我们对此类问题毫无头绪的时候 xff0c 自顶向下 xff08 top down xff09 为我们提供了一种可靠的解决方法 自顶向下法将复杂的大问题分解为相
  • SecureCRT图形界面(通过设置调用Xmanager - Passive程序)

    首先 xff0c 在服务器进行设置 如果服务器是图形化界面启动的 xff0c xhost 43 命令可以不用执行 root 64 test xhost 43 xhost unable to open display 34 34 设置disp
  • 一种GPS辅助的多方位相机的VIO——Slam论文阅读

    34 A GPS aided Omnidirectional Visual Inertial State Estimator in Ubiquitous Environments 34 论文阅读 这里写目录标题 34 A GPS aided
  • docker & LXC

    目录 一 LXC1 了解Docker的前生LXC2 LXC与docker的关系3 与传统虚拟化对比4 LXC部署4 1 安装LXC软件包和依赖包4 2 启动服务4 3 创建虚拟机 5 LXC常用命令 二 doker1 什么是docker2
  • curl命令总结

    curl no cache d Users Administrator Desktop curl 7 73 0 3 win64 mingw bin gt curl Iv http abc gkmang cn 8081 index php l
  • 使用FastJSON 对Map/JSON/String 进行互转

    前言 Fastjson是一个Java语言编写的高性能功能完善的JSON库 xff0c 由阿里巴巴公司团队开发的 1 主要特性 高性能 fastjson采用独创的算法 xff0c 将parse的速度提升到极致 xff0c 超过所有json库
  • ai面向分析_2020年面向企业的顶级人工智能平台

    ai面向分析 In the long term artificial intelligence and automation are going to be taking over so much of what gives humans
  • 回答问题人工智能源码_回答21个最受欢迎的人工智能问题

    回答问题人工智能源码 Artificial intelligence sets the stage for a new era of solutions to be made with computers It allows us to s
  • 人工智能药物设计_用AI革新药物安全

    人工智能药物设计 介绍 Introduction Advances in the life sciences have brought about a transformative impact on healthcare with lif
  • 数据集分为训练验证测试_将数据集分为训练集,验证集和测试集

    数据集分为训练验证测试 测试我们的模型 Testing Our Model Supervised machine learning algorithms are amazing tools capable of making predict

随机推荐