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. ORM多表操作之创建关联表及添加表记录

    创建关联表 关于表关系的几个结论 (1)一旦确立表关系是一对多:建立一对多关系----在多对应的表中创建关联字段. (2)一旦确立表关系是多对多:建立多对多关系----创建第三张关系表----id和两 ...

  2. [UE4]AWP开镜时模糊

    一.Add to Viewport的Zorder越大,添加进来的UI越靠近前面.也就是大的Zorder会覆盖Zorder小的UI. 二.镜头模糊,在专心UI中添加一个模糊滤镜设置模糊值,并放在最上层.

  3. [UE4]使用蓝图关闭对象的碰撞SetActorEnableCollision

    在一个人的身上创建多把枪的时候,由于枪与枪之间重贴会产生碰撞冲突,到时角色控制出现不正常(上下左右行走总是往一个方向移动),这些可以关闭枪支的碰撞:

  4. sas 日期比较代码备忘

    DATA A;    SET S.payrecordinfo;    YY=DATEPART(AddTime);    FORMAT YY MMDDYY10.;RUN; DATA A1;    SET ...

  5. OpenJudge 兔子与樱花

    [题解] 求任意两点间的最短路径.此题数据量较小,用Floyd算法,时间复杂度为O(n^3). 参考https://blog.csdn.net/qq_34594236/article/details/ ...

  6. HibernateUtil工具类的使用

    为了简化代码的重复性,使用HibernateUtil工具类对Hibernate有关的代码进行整合 主要实现有,getSessionFactory(),getSession(),closeSession ...

  7. django-response对象

    HttpResponse 对象则需要 web 开发者自己创建,一般在视图函数中 return 回去.下面我们就来看看 HttpResponse 对象的各种细节 首先,这个对象由 HttpRespons ...

  8. JSP:注册&登录

    数据库:Mysql 除了_id自动增长,其余全是varchar 注册:register.jsp <%@ page language="java" import="j ...

  9. Flume数据采集准备

    , flume的官网:http://flume.apache.org/ flume的下载地址:http://flume.apache.org/download.html 这里我们用的是apache版本 ...

  10. 解决KVM中宿主机通过console无法连接客户机

    转自https://www.linuxidc.com/Linux/2014-10/107891.htm 一.问题描述: KVM中宿主机通过console无法连接客户机,卡在这里不动了. # virsh ...