Chinaunix首页 | 论坛 | 博客
  • 博客访问: 749842
  • 博文数量: 176
  • 博客积分: 2548
  • 博客等级: 少校
  • 技术积分: 1749
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-29 16:36
个人简介

爱咋咋地

文章分类

全部博文(176)

文章存档

2024年(1)

2023年(17)

2022年(19)

2021年(3)

2020年(1)

2018年(1)

2017年(1)

2014年(1)

2013年(4)

2012年(11)

2011年(19)

2010年(22)

2009年(71)

2008年(5)

分类: 信息化

2023-09-06 17:15:29

当我先是吐槽,然后再努力搞清楚:是谁把full-width/half-width characeter 翻译为“全角/半角”时,发现原来又是因为小日子,下面是在Wikipedia里面找到的截图。

小日子将zenkaku/hankaku 直接写成了“全角/半角”,虽然ta写的是日文,但基本也等同于古汉语。
(有熟悉日语或日本文化的同学可以留言,再给讲讲小日子如此将zenkaku->全角,hankaku->半角 如此翻译的原因)。
接下来大致说说为什么会有出现全角和半角的问题。
在最初计算机刚刚发展起来的时候,计算机屏幕还不是图形化的,主要是在上面显示字符。以ASCII为代表的西语字母编码为每个字符占一个字节,字形为长方形,所以从操作系统到显示驱动、再到字库,可能连显示器硬件设计也就按照西语的要求来做的。

但这种设计遇到了以当年日语为代表的东亚语系后就出现了问题:
问题1:东亚语系里面的字符很多,比ASCII要多得多,一个字节根本放不下。
问题2:东亚语系的字符以方块字为主体。所以原来设计的长方形字符显示不再适用。

那这个问题如何解决呢?简单
问题1的解法:一个字节不够咱们就多扩展几个字节来存放。
问题2的解法:将屏幕上两个长方形的显示位合并起来,用来显示方块字。

以上的解决方法直接用英文来表述就叫:full-width(全宽度,用多个字节和2个显示位来显示1个字符),
与之对应的(也就是用来显示ASCII字符的)则为:half-width(半宽度,用1个字节和1个显示位来显示1个字符)

上面只是简单说明了问题和解法,不过里面还存在了诸多的细节需要处理:
1.如果只是纯英文或纯日文或纯中文 “文字”,则没有问题。
2.如果里面有几种语言混杂在一起怎么办?这样会出现错行或不能对齐的现象。
3.如果里面有数字怎么办?也会出现错行或不能对齐的问题。
4.如果里面有标点符号怎么办?这个问题比较复杂。有些符号是全世界通用的,比如逗号,句号等;但还有些标点符号是某种语言独有的,比如书名号《》。如果逗号句号用半角,书名号用全角那么还是会出现错行或不能对齐的问题。

错行或不能对齐的问题怎样办?凉拌。
给所有的半角字符再做一份相对应的全角字符(占用多个字节和2个显示位来显示1个字符)
File:Difference Between Halfwidth and Fullwidth.png

当技术进步到图形化界面后,全角和半角的问题越来越不重要了。但还是会经常偶尔冒出来恶心你一下。不管是无意间把输入法的全角打开导致输入混乱,还是网上拷贝下来的一段文字里面的全角字符让你的文档风格不一(被一眼识破是网上抄的),这些都是我们不得不面对的麻烦。

现在这个问题基本清楚了。

另外,如果这两个专业名词被直接翻译为“全宽度/半宽度”,估计能够拯救无数张小白的“懵那啥脸”。

最后,附上一段linux bash script来做文件的全角<->半角之间的转换:
(有特殊字符,发出来变成?了,贴张图吧)
#!/bin/bash
halfwidth='!"#$%&'\''()*+,-.\/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~????????? '
fullwidth='!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~??¢£¬ ̄¦¥? '
sed -e "y/$halfwidth/$fullwidth/" $@

阅读(263) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~