截取UTF-8编码的汉字,最后一个字出现乱码的问题
问题描述
原来字串内容name为下面内容:
######name=杨乃文做DJ,微信公众号FunRadio。什么样的姿态是小丑姿态?2016046######
需要截取成大小为64的name_rm[64]的数组内容,出现如下乱码:
######name=杨乃文做DJ,微信公众号FunRadio。什么样的姿态斣#####
问题分析
UTF-8编码,汉字占3个字节,英文占一个字节,标点符号占领3个字节。
- int getsubstringlen(char *string,int len)
- {
- int j = ;
- int n = ;
- char *p = NULL;
- int str_length = len;
- p = string;
- while(n <= str_length)
- {
- if((*p & 0XFC)==0XFC)
- {
- j = ;
- }
- else if((*p & 0XF8)==0XF8)
- {
- j = ;
- }
- else if((*p & 0XF0)==0XF0)
- {
- j = ;
- }
- else if((*p & 0XE0)==0XE0)
- {
- j = ;
- }
- else if((*p & 0XC0)==0XC0)
- {
- j = ;
- }
- else
- {
- j = ;
- }
- if (n+j<=str_length)
- {
- n += j;
- }else
- break;
- p = p+j;
- }
- return n;
- }
UTF-8的编码规则很简单, 只有两条:
1) 对于单字节的符号, 字节的第一位设为0, 后面7位为这个符号的unicode码. 因此对于
英语字母, UTF-8编码和ASCII码是相同的.
2) 对于n字节的符号(n>1), 第一个字节的前n位都设为1, 第n+1位设为0, 后面字节的前
两位一律设为10. 剩下的没有提及的二进制位, 全部为这个符号的unicode码.
下表总结了编码规则, 字母x表示可用编码的位.
- <SPAN xmlns="http://www.w3.org/1999/xhtml">// #txt---
- | Unicode符号范围 | UTF-8编码方式
- n | (十六进制) | (二进制)
- ---+-----------------------+------------------------------------------------------
- 1 | 0000 0000 - 0000 007F | 0xxxxxxx
- 2 | 0000 0080 - 0000 07FF | 110xxxxx 10xxxxxx
- 3 | 0000 0800 - 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
- 4 | 0001 0000 - 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- 5 | 0020 0000 - 03FF FFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- 6 | 0400 0000 - 7FFF FFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- 表 1. UTF-8的编码规则
- // #txt---end
- </SPAN>
截取UTF-8编码的汉字,最后一个字出现乱码的问题的更多相关文章
- 各种编码中汉字所占字节数;中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030
vim settings set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936,latin1set termencoding=utf-8se ...
- SQL 将URL编码转汉字!
原文:SQL 将URL编码转汉字! -- ============================================= -- 作 者: ruijc -- 描 述: 将Url编码转明文字符 ...
- 如何用excel urldecode解码把url编码转为汉字?
统计分析可以反映出网站运营的情况,并根据实际作出相应的调整,是站长必需的基础技能.ytkah感觉最好用的是谷歌统计,里面有个搜索关键词及对应受访页面,这个功能对优化用处很大,但大家都知道访问不太顺畅. ...
- Android项目,从web上取下汉字,中文部分乱码
Android项目,从web上取下汉字,中文部分乱码. 常见问题,搜索一下,网上有很多办法解决.如果还没有试过这个办法,可以尝试一下. BufferedReader in = new Buffered ...
- 你不知道的 页面编码,浏览器选择编码,get,post各种乱码由来
原文:你不知道的 页面编码,浏览器选择编码,get,post各种乱码由来 asp.net页面编码和浏览器的选择编码 每个asp.net的朋友都知道,在新版本的visual studio,在没有任何设置 ...
- 在UTF-8页面中引入编码为GBK的JavaScript文件乱码问题了
原文地址:http://js8.in/2009/12/11/%E5%AF%B9%E5%BC%95%E7%94%A8%E5%A4%96%E9%83%A8javascript%E9%A1%B5%E9%9D ...
- URL编码以及GET和POST提交乱码解决方案 (转)
1. 什么是URL编码. URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服 ...
- JavaWeb使用Filter进行字符编码过滤 预防web服务中文乱码
JavaWeb使用Filter进行字符编码过滤 预防web服务中文乱码 准备条件:一个创建好的 JavaWeb 项目 步骤: 1.创建一个类并实现 Filter 接口 import javax.ser ...
- ***PHP各种编码的汉字字符串截取
虽然PHP有现成的截取字符串函数substr(),但是这个函数不能对汉字字符串进行截取,要实现这种效果还需要我们自己去编写相应的函数.汉字有多种编码,比如GB2312,UTF-8等,汉字字符串的截取需 ...
随机推荐
- 机器学习实战笔记(Python实现)-04-Logistic回归
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- [No0000A9]实用word用法
目录 TOC \o "1-3" \h \z \u 三招去掉页眉那条横线.... PAGEREF _Toc465252982 \h 08D0C9EA79F9BACE118C8200 ...
- [LeetCode] Dungeon Game 地牢游戏
The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. ...
- Mongodb数据库学习系列————(一)Mongodb数据库主从复制的搭建
Mongodb数据库主从复制的搭建 Writeby:lipeng date:2014-10-22 最近项目上用到了位置查询,在网上 ...
- SQLite源程序分析之sqlite3.c
/****************************************************************************** ** This file is an a ...
- CSS3常用属性(边框、背景、文本效果、2D转换、3D转换、过渡、有过渡效果大图轮播、动画)
CSS3边框: 1.CSS3圆角:border-radius 属性--创建边框线的圆角 <body style="font-size:24px; color:#60F;"& ...
- LINUX操作系统VIM的安装和配置
VIM的安装 在命令行敲入"vi"后按"tab"键,可以看到目前系统中只安装了vi和vim.tiny. vim是从VI发展而来的一个文本编辑器,功能更强大. ...
- [翻译] Android是怎样绘制视图的
原文:How Android Draws Views 当一个Activity获取到焦点的时候,它的布局就开始被绘制. 绘制的过程由Android framework处理.但布局层级的根节点必须由Act ...
- C# 在数组中判断是否存在某个数组值
(1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ...
- mongodb安装启动遇到的问题
好不容易下载到了mongodb,配置的时候遇到了不少问题. 下载的是解压包,不是官网的,有一个bin目录,解压到一个自己想要的目录,如d:\mongo,首先把bin复制进来,然后创建data目录,da ...