实现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

SOI技术解析:绝缘体上硅的结构优势与应用场景

本文深入解析了SOI(绝缘体上硅)技术的核心结构、性能优势与应用场景。SOI通过在硅衬底与器件层之间引入绝缘的埋氧层,实现了优异的电隔离,从而显著降低芯片功耗、提升工作频率并增强抗干扰能力。该技术已广泛应用于5G射频前端、高性能计算、汽车电子及MEMS传感器等关键领域,是推动半导体性能持续提升的重要技术路径。

jj890的博客 403

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

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

qwert124516的博客 1335

重磅!AI实时读取总结微信聊天记录,附MCP协议+智能体配置教程!

【摘要】本文介绍了一套AI实时分析微信聊天记录的解决方案,通过Chatlog+Trae+MCP协议实现智能整理群聊信息。Chatlog作为开源工具本地解析微信数据,确保隐私安全;Trae提供AI分析能力,支持自然语言处理。操作步骤包括:1)下载运行Chatlog并启动HTTP服务;2)安装Trae配置MCP协议;3)创建智能体设置提示词。该方案虽需初始配置,但能有效解决群聊信息过载问题,自动提炼关键内容,避免有价值信息被淹没。文中提供了详细教程链接和网盘资源。

puyihuan的博客 1万+

Oracle集群管理-19.3升级19.18 opatchauto总结(java报错,resume oneoffs缺失目录)

t. (那个认为补丁已经打上了,但是oneoffs目录里面没有。将安装包文件的权限全部改成777.就继续执行了上述命令 ,此时使用opatch lsinv也是报错 ,在正常执行opatchauto apply。1 创建目录,存放补丁包,并赋予权限。于是使用如下命令对补丁进行回滚。

oradbm的博客 1415

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

ZBrush 2021来了

这次给大家带来的是:zbrush2021.1.1 win安装教程 1.下载压缩包之后解压到文件夹当中,然后打开ZBrush_2021_Installer.exe进行软件安装, 如下图 2.在这里我们保持默认的简体中文版即可,然后点击确认,如下图 3.第三步我们点击前进即可,如下图 4.第四步我们来到许可协议,在这里我们点击我接受此协议,然后点击前进,如下图 5.第五步我们来到安装目录,在这里我们可以设置安装路径,如下图 6.在这里我将安装目录修改安装到E盘为例,然后点击下一

3D游戏建模 1188

为什么要采用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

无参考图像质量评估方法:BRISQUE、RankIQA、DIQA

常用的图像质量评估(IQA)分为无参考和有参考两种类型。常见的有参考图像质量评估方法有PSNR,SSIM以及VMAF。其中vmaf是针对视频来讲的,在它的评价方法里面添加了一些时域信息,如果应用于单张图片,需要做一些处理,如去除时域信息。有参考意味着图像质量是以参考图为基准。基于参考图像都是高清图像的假设,这些评价方法已经广泛应用于图像压缩以及图像传输、拼接之类的处理后图像的质量,假如这张参考图的质量本身就比较渣,那么该评价指标可信度就大大降低。

weixin_51732791的博客 3191

【DEIM创新改进】全网首发、独家特征融合创新改进篇 | CVPR2025 | 引入RLAB残差线性注意力特征融合块,有效融合并强调多尺度特征,有效减少信息丢失,助力DEIM目标检测有效涨点

本文提出了一种改进DEIM网络模型的新方法RLAB(残差线性注意力特征融合模块),用于医学图像生物标志物分割。RLAB模块通过多尺度残差精炼和注意力机制,有效整合编码器跳跃连接与解码器特征图,提升特征对齐和关键区域关注能力。实验表明,该方法在MoNuSeg、DSB等四个医学图像数据集上显著优于现有方法,最高提升4.03%的绝对性能。文章详细介绍了RLAB的网络结构、核心代码实现方式,并提供了将模块集成到DEIM模型的具体步骤。

Ai缝合怪、助力小伙伴高效发论文 349

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

[最新]MapReduce综合应用案例 — 气象数据清洗

【代码】[最新]MapReduce综合应用案例 — 气象数据清洗。

M_inherit的博客 1018

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

【数字孪生与仿真技术】10:半导体制造中的虚拟量测技术深度解析:从多尺度建模到工业级应用

摘要:半导体制造过程中,晶圆加工需实时监测300+关键参数,传统物理量测技术面临产能损耗、延迟检测等痛点。本文系统阐述虚拟量测(Virtual Metrology)技术的完整解决方案,通过多尺度混合建模实现物理机理与数据驱动的深度融合。内容涵盖等离子体刻蚀、薄膜沉积等关键工艺的物理模型构建,LSTM神经网络的数据校正算法,以及边缘-云协同的实时部署架构。某12英寸晶圆厂实践表明,虚拟量测技术可减少70%物理量测频次,异常漏检率从18%降至3%,机台利用率提升11%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2553

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

UCS2编码与解码

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

【Stevenson】的专栏 903

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 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、付费专栏及课程。

余额充值