Lazarus 0.9.26中,涉及范围最广的的改变就是所有的的String默认都采用UTF8编码,IDE终于有了完全的UTF8支持,以前在源码编辑器中“吃掉”半个汉字的情况不再出现。对于Linux下的用户来说这也是好消息,大家终于可以在源码编辑器中看到中文了。当然了,好东西总是代价比较昂贵的:旧代码和项目的迁移就变成了一个不小的问题。现在如果迁移旧项目到0.9.26会遇到以下的问题:
1、项目所有文件里面的中文字串都必须重新输入。
    0.9.26提供了转换项目编码的工具:Convert encoding of project/packages,不过很可惜这个工具对中文的支持很差——它只能把所有的中文字符都变成问号,包括所有组件里面的中文字符。举例子说,例如一个Caption是“我的窗体”的Form,使用了0.9.26的转换工具转换为UTF8编后,他的Caption就会变成“????”。目前来看唯一可行的处理方法就是不使用Lazarus自带的转码工具,改为用第三方软件打开所有源码文件来进行装换。
2、对String的使用。
    0.9.24以前的版本String是ANSI编码,一个英文是1Byte,汉字是2Byte。0.9.26中使用UTF8编码,英文字母占据的空间不变,汉字占据的空间将是3~6个Byte不等。而在Lazarus0.9.26中并没有与ANSI编码中Char类型对应的UTF8char,所以在取String中某个汉字的操作相对而言就复杂了。0.9.26版本在LCLProc单元中提供了几个与UTF8字符串相关的函数,例如有UTF8Length、UTF8CharAt等等,在一定程度上可以给我们提供帮助,不过前提是大家要对UTF8编码方式有更深的理解。
3、Windows下访问文件系统时候遇到的中文目录及文件名。
    以TStringList的SaveToFile为例,在0.9.26之前我们可以这样做:(TStringList实例).SaveToFile('C:/中文目录/中文名称'),不过在现在这样做的结果就是扔个“找不到目录”的异常给你。原因在于系统库中还是使用的ANSI编码,所以将SaveToFile的参数按照ANSI编码来解析,自然就出错了。知道了原因,解决的办法就很简单了:把文件名用UTF8ToAnsi重新转换为ANSI编码,再传给SaveToFile做参数。

Lazarus 0.9.26——UTF8编码副作用的更多相关文章

  1. Tomcat7.0/8.0 详细安装配置图解,以及UTF-8编码配置

    Tomcat7.0/8.0 详细安装配置图解,以及UTF-8编码配置 2017年01月24日 10:01:48 阅读数:51265 标签: tomcattomcat安装tomcat配置tomcat编码 ...

  2. 将汉字转为UTF-8编码

    01./** 02. * 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名. 03. * @param s 原文件名 04. * @return 重新编码后的文件名 05. */ ...

  3. 中文字符utf-8编码原则

    UTF-8是一种变长字节编码方式.对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0:如果是 多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字 ...

  4. ANSI、ASCII、Unicode和UTF-8编码

    来自:http://blog.163.com/yang_jianli/blog/static/161990006201371451851274/ --------------------------- ...

  5. javascript中的Base64.UTF8编码与解码详解

    javascript中的Base64.UTF8编码与解码详解 本文给大家介绍的是javascript中的Base64.UTF8编码与解码的函数源码分享以及使用范例,十分实用,推荐给小伙伴们,希望大家能 ...

  6. JAVA输出带BOM的UTF-8编码的文件

    当从http 的response输出CSV文件的时候,设置为utf8的时候默认是不带bom的,可是windows的Excel是使用bom来确认utf8编码的,全部须要把bom写到文件的开头. 微软在 ...

  7. 萌新笔记——用KMP算法与Trie字典树实现屏蔽敏感词(UTF-8编码)

    前几天写好了字典,又刚好重温了KMP算法,恰逢遇到朋友吐槽最近被和谐的词越来越多了,于是突发奇想,想要自己实现一下敏感词屏蔽. 基本敏感词的屏蔽说起来很简单,只要把字符串中的敏感词替换成"* ...

  8. 截取UTF-8编码的汉字,最后一个字出现乱码的问题

    问题描述 原来字串内容name为下面内容: ######name=杨乃文做DJ,微信公众号FunRadio.什么样的姿态是小丑姿态?2016046###### 需要截取成大小为64的name_rm[6 ...

  9. UTF-8编码规则(转)

    from:http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html UTF-8是Unicode的一种实现方式,也就是它的字节 ...

随机推荐

  1. kubernetes k8s yum localinstall

    localinstall 是安装在本地的rpm包顺便解决依赖关系 yum localinstall docker-common-1.12.6-68.gitec8512b.el7.centos.x86_ ...

  2. [UE4]Set Array Elem

    用一个新元素替换数组中已有的元素. “Size to Fit”:true,表示如果index参数大于数组所有,将会自动扩展数组大小.

  3. 00012 - ps命令详解

    使用权限:所有使用者使用方式:ps [options] [--help]说明:显示瞬间行程 (process) 的动态参数:ps的参数非常多, 在此仅列出几个常用的参数并大略介绍含义-A    列出所 ...

  4. 微信小程序,个人开发者创业新平台

    在移动互联网世界,微信无小事,微信的事,是整个创业圈的事.经过一年多的酝酿,2017年1月9日,微信小程序发布了.发布伊始,无疑是对整个业界注入一剂兴奋剂,整个微信的生态圈的企业和个人开发者,都跃跃欲 ...

  5. Java 12 - Java StringBuffer和StringBuilder类

    Java StringBuffer和StringBuilder类 当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类. 和String类不同的是,StringBu ...

  6. 对KVM虚拟机进行cpu pinning配置的方法

    这篇文章主要介绍了对KVM虚拟机进行cpu pinning配置的方法,通过文中的各种virsh命令可进行操作,需要的朋友可以参考下 首先需求了解基本的信息 1 宿主机CPU特性查看 使用virsh n ...

  7. css的优化规则

    1.避免过度约束: // 不推荐 ul.nav{..} // 推荐 .nav{..}  2.避免过长的后代选择符: // 不推荐 html div tr td {..} 3.避免链式(交集)选择符: ...

  8. NIO读写文件并加锁

    一.读取文件 package lock; import java.io.File; import java.io.FileNotFoundException; import java.io.IOExc ...

  9. 20165205 2017-2018-2 《Java程序设计》第八周学习总结

    20165205 2017-2018-2 <Java程序设计>第八周学习总结 教材学习内容总结 进程与线程 线程不是进程,但其行为很像进程,线程是比进程更小的执行单位. 与进程不同,线程的 ...

  10. 虚拟机安装 gentoo 的时候,通过 filezilla 上传 stage3 文件

    最近需要在 虚拟机里面安装gentoo,但因为虚拟机里面自动下载的 stage3 太慢了,所以也在寻找解决办法,最终发现 filezilla 是个好办法. 主要参考 https://www.linux ...