全半角字符互相转换

供新手入门和老手参考的教程和相关资料,包括中文帮助
User avatar
amnesiac
Posts: 186
Joined: 22 Nov 2013, 03:08
Location: Egret Island, China
Contact:

全半角字符互相转换

24 Aug 2014, 21:02

导言:这类文章似乎是给大家提供实用的脚本,实际上你不一定用的上(100 人中有几个需要可能都很多了),至少并非马上需要,而我真正想告诉大家的是我是如何写脚本的。因此,本文中这些脚本的用途只是赠品,希望大家阅读时不要买椟还珠。
我曾说过,要写出好脚本需要有清晰的思路,如何做到这点呢?有两个基本前提:
  1. 对 AutoHotkey 自身命令、函数及其用法十分熟悉,例如看到问题中需要按一定规则调整顺序时立即想到 Sort 命令。这是在编写过一定数量的脚本后形成的自然反应。这是基础。
  2. 深入观察目标任务,尽可能了解其各方面特点,并从中提取有用的信息应用于脚本。这点不详细解释,请从后面两段代码的不同思路上体会。
linpinger 的实现
linpinger wrote:之前使用的是用stringreplace一个个的替换,不过这样会有乱码的产生
因为某些中文字的Ascii码是这样的, 类似: 丵 (0x8151),一般的中文字符类似: 好(0xbac3),前面字符的Ascii值都大于128,后面的也大于128,个别例外,后半部分小于128, 丵 就是例子,这样使用 stringreplace 的时候,可能将 丵 字的后半部分也替换为中文字符,这样从这个字开始就出现乱码了,所以偶改进了一下转换方式,一个字符一个字符的来判断,这样乱码问题应该能避免了

注:linpinger 当时使用的是 AutoHotkey Basic,所以 StringReplace 替换时会出现乱码,此问题在 AutoHotkey_L 中已不存在。

Code: [Select all] [Expand] [Download] (Script.ahk)GeSHi © Codebox Plus


amnesiac 的实现
刚开始想到这个问题时,我想到使用类似映射表来实现,经过观察字符编码的关系后,发现可以用很简单方法实现。

Code: [Select all] [Download] (Test.ahk)GeSHi © Codebox Plus

InputBox, Key, 输入框, 请输入要转换成全角的字符
MsgBox, % Key ":" HalfShape4FullShape(Key, true)
return

所需函数:

Code: [Select all] [Expand] [Download] (Function.ahk)GeSHi © Codebox Plus


现在你知道我发现了什么?
小结
转换类问题,主要思路有两种:
  1. 使用 StringReplace/RegexReplace 直接替换,一般适用于有限数目的替换;
  2. 通过映射关系替换,有两种情况:
    1. 能够在内部获取映射关系实现替换,如字符与编码的转换;
    2. 需自行构造或从外部文件获取映射关系查表替换,如本文中 linpinger 的脚本。
在我的脚本中利用了全半角字符编码相差 65248 的原理,这是深入观察的结果,所以转换起来就简单多了。
AutoHotkey 学习指南(Beauty of AutoHotkey)
I do not make codes, and only a porter of AutoHotkey: from official to Chinese, from other languages to AutoHotkey, and show AutoHotkey to ordinary users sometimes.
tmplinshi
Posts: 1091
Joined: 01 Oct 2013, 14:57

Re: 全半角字符互相转换

25 Aug 2014, 07:24

好用!
User avatar
huyaowen
Posts: 100
Joined: 28 Jul 2014, 01:15

Re: 全半角字符互相转换

25 Aug 2014, 22:10

好用!

Return to “教程资料”

Who is online

Users browsing this forum: No registered users and 2 guests