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的一种实现方式,也就是它的字节 ...
随机推荐
- STP RSTP
一.透明网桥 1.对于一般的透明网桥来说,通常都具有以下的特点: +拓展LAN的能力 +自主动态学习站点的地址信息 当网桥的某个端口上收到含有某个源MAC地址的数据帧时,它就把该MAC地址和接收该数据 ...
- ViewPager系列之 仿魅族应用的广告BannerView
转自:https://juejin.im/post/5933c65d0ce463005717cbe9 前言 Banner广告位是APP 中的一个非常重要的位置,为什么呢?因为它能带来money.是一个 ...
- Mybatis 系列5-结合源码解析TypeHandler
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...
- Service Worker初体验
http://web.jobbole.com/84792/ http://imweb.io/topic/56592b8a823633e31839fc01
- MySQL 迁移并搭建主从(实践)
第一阶段 一.数据的初始化 1.老主库 关闭sql_log_binset sql_log_bin = off; 创建导出用户grant all privileges on *.* to 'dump'@ ...
- jQuery动态创建DOM节点
var SKU=$("#SKU"); // 通过ID查找到指定表格 var oTable=SKU[0]; // 获取第一个表格 // 获取正文tbody元素 var tBodies ...
- MySQL存储过程 事务transaction
MySQL 中,单个 Store Procedure(SP) 不是原子操作,而 Oracle 则是原子的.如下的存储过程,即使语句2 失败,语句 1 仍然会被 commit 到数据库中: create ...
- while 循环,格式化输出,运算符(not,and,or)
一,while 循环 1. 循环. while循环 while 条件: 代码块(循环体) 执行流程: 1. 判断条件是否为真. 如果真. 执行代码块 2. 再次判断条件是否为真...... 3. 当条 ...
- 百度 OCR API 的使用以及与 Tesseract 的简单对比
目录 百度 OCR API 初探 用 Python 调用百度 OCR API 与 Tesseract 的简单对比 百度 OCR API 初探 近日得知百度在其 APIStore 上开放了 OCR 的 ...
- C# WPF 文件复制,相对路径
/// <summary> /// 下载/复制 /// </summary> /// <param name="sender"></par ...