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. python之路——2

    王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 复习 1.编译型:一次性将全部的代码编译成二进制文件 c c++ 优点:运行效率高 缺点:开发速度慢,不能跨 ...

  2. 保存chrome主题背景的图片

    chrome主题背景的图怎样可以保存下来? 在chrome地址栏中输入: chrome://theme/IDR_THEME_NTP_BACKGROUND?npebkpkiddfadallfhefpip ...

  3. [UE4]增加机器人

    一.新增蓝图继承自Shooter名为AIShooter.玩家角色也是继承自Shooter. 二.使用AIMoveTo追踪玩家.玩家控制的角色调用这个方法没反应. 三.关卡中添加组件NavMeshBou ...

  4. [UE4]更通用的接口,将UserWidget作为图标添加到小地图

    将图标改成UserWidget添加到小地图,UserWidget支持动画特效,更丰富小地图的功能. 一.在小地图图标结构体中,将Flag数据类型改成UserWidget,删除ImageWidget(类 ...

  5. JSP基础解析

    EL表达式     https://www.cnblogs.com/zhouguanglin/p/8117406.html EL(Expression Language) 是为了使JSP写起来更加简单 ...

  6. vue学习笔记-初始化一个vue项目(1)

    1.cnpm install -g vue-cliUsage:vue init <template-name> <project-name> 2.我们一般使用webpack模版 ...

  7. vs code编辑器使用教程指南

    1.安装插件: 这里可以搜索到插件并安装. 2.修改快捷键或查找快捷键: 这里可以进行快捷键的查找和修改 3.进入引用文件: 点击f12,或者右击快捷键可以看到进入引用文件的快捷方法. 4.查看目录:

  8. CS229 3.用Normal Equation拟合Liner Regression模型

    继续考虑Liner Regression的问题,把它写成如下的矩阵形式,然后即可得到θ的Normal Equation. Normal Equation: θ=(XTX)-1XTy 当X可逆时,(XT ...

  9. Django跨域问题

    相关博客地址 同源策略与Jsonp 同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可 ...

  10. mysql千万级数据库插入速度和读取速度的调整记录

    一般情况下mysql上百万数据读取和插入更新是没什么问题了,但到了上千万级就会出现很慢,下面我们来看mysql千万级数据库插入速度和读取速度的调整记录吧. 1)提高数据库插入性能中心思想:尽量将数据一 ...