Lazarus 0.9.26——UTF8编码副作用
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编码副作用的更多相关文章
- Tomcat7.0/8.0 详细安装配置图解,以及UTF-8编码配置
Tomcat7.0/8.0 详细安装配置图解,以及UTF-8编码配置 2017年01月24日 10:01:48 阅读数:51265 标签: tomcattomcat安装tomcat配置tomcat编码 ...
- 将汉字转为UTF-8编码
01./** 02. * 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名. 03. * @param s 原文件名 04. * @return 重新编码后的文件名 05. */ ...
- 中文字符utf-8编码原则
UTF-8是一种变长字节编码方式.对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0:如果是 多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字 ...
- ANSI、ASCII、Unicode和UTF-8编码
来自:http://blog.163.com/yang_jianli/blog/static/161990006201371451851274/ --------------------------- ...
- javascript中的Base64.UTF8编码与解码详解
javascript中的Base64.UTF8编码与解码详解 本文给大家介绍的是javascript中的Base64.UTF8编码与解码的函数源码分享以及使用范例,十分实用,推荐给小伙伴们,希望大家能 ...
- JAVA输出带BOM的UTF-8编码的文件
当从http 的response输出CSV文件的时候,设置为utf8的时候默认是不带bom的,可是windows的Excel是使用bom来确认utf8编码的,全部须要把bom写到文件的开头. 微软在 ...
- 萌新笔记——用KMP算法与Trie字典树实现屏蔽敏感词(UTF-8编码)
前几天写好了字典,又刚好重温了KMP算法,恰逢遇到朋友吐槽最近被和谐的词越来越多了,于是突发奇想,想要自己实现一下敏感词屏蔽. 基本敏感词的屏蔽说起来很简单,只要把字符串中的敏感词替换成"* ...
- 截取UTF-8编码的汉字,最后一个字出现乱码的问题
问题描述 原来字串内容name为下面内容: ######name=杨乃文做DJ,微信公众号FunRadio.什么样的姿态是小丑姿态?2016046###### 需要截取成大小为64的name_rm[6 ...
- UTF-8编码规则(转)
from:http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html UTF-8是Unicode的一种实现方式,也就是它的字节 ...
随机推荐
- lvm的磁盘管理知识点整理
首先感谢参考的博客网址: http://blog.51cto.com/dreamfire/1084729 https://www.cnblogs.com/kevingrace/p/5825963.ht ...
- Linux下的文件操作——基于文件描述符的文件操作(1)
概要: 打开.创建和关闭文件 读写文件 文件定位 获取文件信息 打开.创建和关闭文件 函数原型: #include <sys/types.h> //头文件 #include <sys ...
- XHR HTTP 请求 get post请求解决方案
XHR请求的 测试方式, postman 64位下载地址: http://www.downza.cn/download?file=2017%2F01%2FPostmanwin64493.zip& ...
- Android毛玻璃模糊化效果处理
三种方法 第一种:比较简单,性能比较低 /** * 通过调用系统高斯模糊api的方法模糊 * * @param bitmap source bitmap * @par ...
- 0001 - Spring MVC中的注解
1.概述 Spring MVC框架提供了功能强大的注解,大大简化了代码开发的同时也提升了程序的可扩展性 2.注解 2.1.@RequestMapping Spring MVC通过@RequestMap ...
- 禁用win7更新
关闭自动更新服务Windows Update 第一种方法 ---------------------------------------------------------------- Win + ...
- windows gitbook pdf
1.安装 nodejs 下载地址:https://nodejs.org/download/release/v6.9.2/node-v6.9.2-x64.msi 执行安装 配置环境变量:C:\Progr ...
- Elasticsearch的JavaAPI
获取客户端对象 public class App { private TransportClient client; //获取客户端对象 @Before public void getClinet() ...
- MySQL数据库的高可用方案总结
高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.虽然互联网服务号称7*24小时不间断服务,但多多少少有一些时候服务不可用,比如某些时候网页打不开,百度不能搜索或者无法 ...
- RxJava+Retrofit+OkHttp,一步一步封装网络框架;
使用RxJava+Retrofit+OkHttp,首先在build.gradle添加: compile 'com.squareup.okhttp3:okhttp:3.8.1' compile 'com ...