Series60的2.1版本的模拟器编码转换的一个小bug

2024-03-14 03:32

本文主要是介绍Series60的2.1版本的模拟器编码转换的一个小bug,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  Symbian Series 60的2.1中文版本的SDK是个比较不错的开发选择。最大的特色就是支持了TCP/IP Network,可以不用插件情况,很方便地进行网络模拟了。 不过2.1的中文版本在进行GBK转换到UNICODE的API似乎有个BUG。也就是这行的代码:

 CCnvCharacterSetConverter::PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk, Fs)

  在2.1的中文版本的模拟器上,它始终返回一个错误代码(-12),但是呢,Symbian 6.1的中文手机就已经支持这个API了。如果编译成ARMI代码,放在真机上是没有问题的,只是模拟器的问题,而且只是2.1的中文版模拟器的问题。我后来在2.2的中文版模拟器上跑过,也没有问题。

  不过,有点奇怪的是,Symbian 2.x后的模拟器都支持直接加宽GBK编码在模拟器上的显示,也就是直接使用_L宏就可以了,比如_L("大家好!"),但是真机上显示出来的还是乱码,那么怎么办呢?

  我的办法就是使用宏嘛,条件编译嘛,比如下面一个条件,我就是直接加宽字符:

#if defined(__WINS__) && defined(__SERIES60_21__)
   ...  // 直接加宽Windows上常规字符串
#else
  ... // 调用CCnvCharacterSetConverter的API进行GBK=>Unicode的编码转换
#endif

  直接加宽字符串呢,可以解决英文ASCII编码到Unicode的转换,因为Unicode下,英文的编码值还是一样的,只是从8为变成16位,高8位为0。而中文的就不一样了,WINDOWS上使用的都是GB2312的汉字编码,属于GBK的大集合,这种编码的特点就是可以和ASCII兼容,因为它的一个字节的最高位为1,而ASCII编码最高位是0。Windows上可以直接通过MultiByteToWideChar(CP_ACP, 0, ...)这个API进行转换成UNICODE了。

  或者直接用WINDOWS的记事本也可以“另存”为Unicode的编码,不过小心的是,它会在文件头增加FF FE两个字节的标记。

  讨论了这么久的编码问题,说到最后,其实直接升级你的SYMBIAN SDK到2.2版本,或许是最佳的选择。

这篇关于Series60的2.1版本的模拟器编码转换的一个小bug的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807081

相关文章

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入