实现UTF-8、UCS2编码和解码

SMS PDU编码 1、短信中心地址长度:包括‘91’和‘F’(单位:字节) 2、短信中心地址类型:国际格式‘91’ 3、短信中心地址SCA:前面要加‘86’,补‘F’凑成偶数 4、信息头字节:发:‘11’正常发送、‘31’需要状态报告、‘51’有报头短信 收:TP-RP TP-UDHI TP-SRR TP-VPF[2] TP-RD TP-MTI[2] 5、消息基准值TP-MR:发:‘0 阅读详情

使用接口实现UTF-8、UCS2的编解码。
编码的原理知识可以看:https://www.zhihu.com/question/23374078

    public void encodeDecode(){
        String str = "测试字符转换";
        try {
            //使用 URLEncoder、URLDecoder方法实现
            String strGBK = URLEncoder.encode(str, "GBK");//把str字符串以GBK的形式编码
            Log.i("michael","strGBK = "+strGBK); //输出编码后的类容
            Log.i("michael","strGBK decode = "+URLDecoder.decode(strGBK, "GBK")); //以GBK的形式解码

            String strUCS2 = URLEncoder.encode(str, "UnicodeBigUnmarked");
            Log.i("michael","strUCS2 = "+strUCS2);
            Log.i("michael","strUCS2 decode = "+URLDecoder.decode(strUCS2, "UnicodeBigUnmarked"));

            String strUTF8 = URLEncoder.encode(str, "UTF-8");
            Log.i("michael","strUTF8 = "+strUTF8);
            Log.i("michael","strUTF8 decode = "+URLDecoder.decode(strUTF8, "UTF-8"));

            //使用getBytes编码,使用 new String解码
            byte[] middleUCS2 =  str.getBytes("UnicodeBigUnmarked"); //把str字符串以UCS2的方式编码
            Log.i("michael","middleUCS2 bytesToHexStr = "+bytesToHexStr(middleUCS2));
            Log.i("michael","middleUCS2 = bytesToHexString "+bytesToHexString(middleUCS2));
            String UCSdecode = new String(middleUCS2,"UnicodeBigUnmarked"); //以UCS2的方式解码
            Log.i("michael","UCSdecode = "+UCSdecode);

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }


    private String bytesToHexStr(byte[] b){  //转换成16进制
        if (b == null) return "";
        StringBuffer strBuffer = new StringBuffer(b.length * 3);
        for (int i = 0; i < b.length; i++){
            strBuffer.append(Integer.toHexString(b[i] & 0xff));
            strBuffer.append(" ");
        }
        return strBuffer.toString();
    }

    public static String bytesToHexString(byte[] bytes) { //转换成16进制
        if (bytes == null) return null;

        StringBuilder ret = new StringBuilder(2 * bytes.length);

        for (int i = 0; i < bytes.length; i++) {
            int b;

            b = 0x0f & (bytes[i] >> 4);

            ret.append("0123456789abcdef".charAt(b));

            b = 0x0f & bytes[i];

            ret.append("0123456789abcdef".charAt(b));
        }

        return ret.toString();
    }

Log信息

04-20 13:30:42.965 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strGBK = %B2%E2%CA%D4%D7%D6%B7%FB%D7%AA%BB%BB
04-20 13:30:42.965 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strGBK decode = 测试字符转换
04-20 13:30:42.966 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strUCS2 = %6D%4B%8B%D5%5B%57%7B%26%8F%6C%63%62
04-20 13:30:42.966 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strUCS2 decode = 测试字符转换
04-20 13:30:42.966 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strUTF8 = %E6%B5%8B%E8%AF%95%E5%AD%97%E7%AC%A6%E8%BD%AC%E6%8D%A2
04-20 13:30:42.966 6966-6966/com.android.yangtao.myapplication1231233 I/michael: strUTF8 decode = 测试字符转换
04-20 13:30:42.967 6966-6966/com.android.yangtao.myapplication1231233 I/michael: middleUCS2 bytesToHexStr = 6d 4b 8b d5 5b 57 7b 26 8f 6c 63 62 
04-20 13:30:42.967 6966-6966/com.android.yangtao.myapplication1231233 I/michael: middleUCS2 = bytesToHexString 6d4b8bd55b577b268f6c6362
04-20 13:30:42.967 6966-6966/com.android.yangtao.myapplication1231233 I/michael: UCSdecode = 测试字符转换
C语言实现UCS2、UTF8与GBK2312编码转换 在软件开发中,字符编码是一个非常重要的概念。不同的编码方式用于在不同的系统和应用中表示文本数据。UCS2、UTF8和GBK2312是三种常见的字符编码方式。为了实现不同编码间的转换,我们可以使用C语言进行编程,利用已有的库或者手动实现转换算法。 阅读详情

相关推荐

纯C语言PDU短信编解码Demo:7-bit压缩与UCS2中文解析

SMS短信在GSM网络中通过PDU协议传输,其编码方式直接决定中文和英文文本的兼容性。7-bit压缩算法用于英文短信,每字符占7位,8个字符压缩为7字节;UCS2则用双字节表示中文,与UTF-8互转需注意字节序。理解这些底层编码原理,对调试4G模组、开发短信网关或嵌入式物联网设备至关重要。PDU帧结构包含SMSC地址、号码半字节反转、DCS数据编码方案等字段,任何一位错位都会导致乱码。一个纯C语言实现、无第三方依赖的PDU编解码Demo,可直接解析十六进制报文或生成可发送的PDU数据,并覆盖半字节转换、7-

weixin_29171087的博客 258

Unicode编码解码在线转换工具

Unicode编码解码在线转换工具 Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standard,目前第五版由Addison-Wesley Professional出版,ISBN-10: 0321480910)对外发表。 2006年7月的最新版本的 Unicode 是5.0版本。 2...

weixin_34319111的博客 876

PDU短信编解码C语言实现:一套代码吃透7bit与UCS2

PDU(Protocol Data Unit)是短信收发中的核心协议格式,通过十六进制串承载号码、编码方案与用户数据。C语言实现PDU编解码,核心在于掌握BCD号码对调、GSM 7bit比特流拼装和UCS2/UTF-8互转三项技术。理解这些原理后,开发者即可在嵌入式平台或后端服务中高效处理AT指令收发,解决中文乱码、长度错位等实际问题。本文以一个不依赖第三方库的C语言demo为例,完整演示从文本到PDU编码、再从PDU解码回文本的闭环流程,并总结常见踩坑点与二次扩展方向,为短信功能开发提供可复用的工程参考。

weixin_29170327的博客 117

unicode ucs2 utf16 utf8 ansi GBK GB2312 互转 及 渲染

unicode ucs2 utf16 utf8 ansi 编码

qiushangren的专栏 3329

PDU短信编解码C语言实现:从十六进制到可读短信的完整指南

在物联网设备接入场景中,GSM 07.11规范定义的PDU格式是短信收发的底层表示方式,涉及十六进制字符串与可读短信之间的转换。其原理基于BCD编码、GSM7位打包和UCS2编码,通过解析SCA、发件人号码、DCS等字段实现解码,反向则完成编码。掌握PDU编解码技术,能有效解决嵌入式开发中短信乱码、号码错位等常见问题,提升物联网网关的通信可靠性。本文以纯C语言demo为例,详细演示PDU短信编解码的完整流程与避坑技巧,适用于嵌入式开发、物联网网关等场景。

weixin_29168675的博客 255

GB2312,UTF8,UCS2汉字编码生成与转换工具

GB2312,UTF8,UCS2汉字编码生成与转换

用goalng实现ascii、UCS2、UTF-8文本字符串的解码与编码

用goalng实现8bit ascii编码、7bit编码、UCS2编码、UTF-8编码的解码与编码8bit ascii编码的解码与编码解码: 8bit ascii编码的解码与编码 解码:

sunjiaming0128的博客 2200

短信UCS编码或解码工具

ucs2/7bit/8bit/ASCII/ UTF-8与中文(英文)间自由切换,粘贴自动切换。对短信开发有用。

Unicode加解码

/// <summary> /// 使用UCS2进行编码,用于发送Unicode字符 /// </summary> /// <param name="str">短信内容</param> /// <returns>编码结果</returns> public stati...

weixin_30375427的博客 140

UCS2-汉字互相转换

可以实现UCS2码和汉字的互相转换,采用VB编写

UNIX/LINUX下C语言中文短信UCS2编码和解码函数源码

发送中文短信,会用到UCS2编码,很多网友反应中文发送和接收乱码,这个烦恼可以解决了。 注意:要在系统配置里增加 LANG=zh_CN.GB18030 export LANG 语言配置不对,这个函数会出错的,另外,例子有点问题,换一个好了 int main() { unsigned char *str="新年快乐,Linux"; unsigned char ucs2str[1024],gbkstr[1024]; int len,i; len=EncodeUCS2(str,ucs2str); ucs2str[len]=0; for(i=0;i<len;i++ ) printf("%02X",ucs2str[i]); printf("\n"); puts(ucs2str); len=DecodeUCS2(ucs2str,gbkstr,len); gbkstr[len]=0; puts(gbkstr); } 多谢你的关注!QQ:364604751

短信发送(M800)

在实习的时候,做了一个关于发送短信的接口,营运商提供一个url,且信息如有中文字符的,必须用DCS 8的格式,当时懵了。。DSC是什么鬼。。后来百度了一大堆资料DSC 8就是用UCS格式做的和咨询M800公司的工程师,才得以解决。。。在编译文字这里花费了好长的时间。大概了解UTF-8 与UCS2的网站有http://www.52rd.com/Blog/Detail_RD.Blog_thieven...

weixin_30906671的博客 140

【OpenCV】背景替换(opencv、python),照片、证件照的背景替换(抠图)

目录步骤:导入库1、读入将要抠图的图片2、create一个带颜色域的mask3、通过mask使得原图只显示汽车,即抠出所需要的部分4、将要替换掉的图像resize或裁剪到和上述图片一样的大小5、将该图片预留出将要重叠上的部分,即将mask部分改为(0,0,0)6、通过和运算使得两部分图片mask部分替换7、最后保存图片 步骤: 导入库 import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np imp

weixin_41729258的博客 4362

中兴F50 pro短信的windows系统级推送的浏览器扩展实现

通过Chrome插件实现中兴F50Pro设备的短信推送到Win11弹窗

qwert124516的博客 1335

Oracle ERP EBS R12 GL总帐业务方案 系统操作

本文档是Oracle ERP系统的总账管理模块使用手册,主要包含以下内容:1.系统架构设计,详细介绍多组织架构、会计科目设置等核心概念;2.总账日常操作流程,包括凭证录入、审核、过账等全流程管理;3.特殊业务处理,涵盖预算控制、内部往来、合并报表等专项功能;4.期末处理,说明月结、年结的操作步骤;5.系统设置指南,提供会计科目表、权限控制等配置说明;6.附录包含各业务模块的分录示例和系统操作图标说明。本手册适用于财务人员学习和使用Oracle ERP总账系统,重点讲解系统功能要点和实操步骤。

anpeng2019的博客 1888

中兴B860AV2.1-A刷机避坑指南:晶晨免拆神器+安卓7.1.2固件实测

本文提供中兴B860AV2.1-A机顶盒的详细刷机教程,重点介绍使用晶晨免拆神器配合安卓7.1.2线刷固件包的实操步骤。内容涵盖刷机前的硬件确认、工具准备、软件设置、烧录全过程监控及常见问题解决,旨在帮助用户安全、高效地完成刷机,规避变砖风险,释放设备潜力。

pytorch8learner的博客 746

PHP实现UCS2编码解码

//手机发送短信时编码/*** * @Method Ucs2Code UCS2编码 * @Param $str 输入字符串 * @Param $encod 输入字符串编码类型(UTF-8,GB2312,GBK) * @Return 返回编码后的字符串*/function Ucs2Code($str,$encode="UTF-8"){$jumpbit=strtoupper($encode)=='GB2312'?2:3;//跳转位数$strlen=strlen($str);//字符串长度$pos=0;//位置$

startend的专栏 4827

论文阅读:Visual Relationship Detection with Language Priors

Visual Relationship Detection with Language Priors(ECCV2016) 文章   尽管大多数的relationship并不常见,但是它们的object和predicate却更频繁地独立出现。paper用这个insight分别独立训练训练object和predicate的模型,然后再进行组合来预测relationship。Visual relatio...

Kivee的博客 2877

为什么要采用UTF-8编码,UTF-8编码有什么好处?

<br />什么是UTF8<br />UTF8并不算是一种电脑编码,而是一种储存和传送的格式,如前所述,每个Unicode/UCS字符都以 2或4个bytes来储存,看看以下的比较:<br /><br />以"I am Chinese"为例<br />用ANSI储存:12 Bytes<br />用Unicode/UCS2储存:24 Bytes + 2 Bytes(header)<br />用UCS4储存:48 Bytes + 4 Bytes(header)<br /><br />以"我是中国人"为例<br

jlfw的专栏 8721

④ Django创建用户中心应用users,扩展用户信息

本章配套视频教程 Django创建用户中心应用users,扩展用户数据 在settings.py文件中配置项目 1、语言配置:LANGUAGE_CODE = 'zh-hans’ 2、时区配置:TIME_ZONE = 'Asia\Shanghai’ 3、模板路径配置:‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)], 并创建templates文件

轻编程的博客 673

02-Redis 核心特性与数据结构详解:揭秘高性能的技术内核

本文深度拆解 Redis 高性能的技术内核:揭秘其凭“内存存储 + C 语言开发” 实现微秒级延迟、10 万 + QPS 的性能优势;详解 5 种基础数据类型(String/Hash 等)与 4 种扩展数据类型(Stream/Geospatial 等)的特性及场景;还介绍多语言支持、RDB/AOF 持久化、主从复制 / 哨兵 / 集群等高可用方案,助读者掌握 Redis 技术核心与实践逻辑。

蜗牛老师,专注编程领域 996

java UCS2编、解码

/** * UCS2解码 * @param src UCS2 源串 * @return 解码后的UTF-16BE字符串 * @throws Exception */ public static String DecodeUCS2(String src) throws Exception { byte[] bytes = new byte[src.length() /...

liujunliang1210的博客 807

MobaXterm简介和使用(服务器连接工具)

MobaXterm 是一个功能强大的远程计算工具,集成了许多常用的远程计算功能,包括 SSH、X11、RDP、VNC、FTP、SFTP 等。

清平乐的技术专栏 1960

PHP实现UCS2编码解码 手机发送短信时编码

/*** * @Method Ucs2Code UCS2编码 * @Param $str 输入字符串 * @Param $encod 输入字符串编码类型(UTF-8,GB2312,GBK) * @Return 返回编码后的字符串 */ function Ucs2Code($str,$encode="UTF-8"){ $jumpbit=strtoupper($encode)=...

iteye_9315的博客 421

【云原生】阿里云SLS日志自定义字段标签实现日志告警

样例:一个典型的java log初始化日志格式把日志中的INFO提取出来做为一个标签,在开源日志框架中,配置采集器实现- regex:在阿里云SLS日志服务同样可以实现,首先我们进入到一个日志库,查看数据接入,我这里使用的是Logtail工具在【处理配置】中,选择【处理插件组合】,新增提取字段插件原始字段:填写要被提取的日志,对应原始字段的内容做正则结果字段:正则表达式对应的捕获组对应结果:捕获组 匹配内容 说明1 ywgy-app-service 服务名称。

CN_Eden 742

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

UCS2编码与解码

UCS2编码与解码 2011-09-09 10:58 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++

【Stevenson】的专栏 903

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: Android N 通话界面_InCallActivity
下一篇: Android N Phone进程启动流程
Yigit_dev
博客等级 码龄11年 92粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值