如何区分一个单词是半角还是全角?

Posted

技术标签:

【中文标题】如何区分一个单词是半角还是全角?【英文标题】:How to distinguish whether a word is half-width or full-width? 【发布时间】:2012-06-09 07:27:21 【问题描述】:

最近我一直在处理混合语言的文本,包括中文、英文,甚至一些表情符号。

我一直在寻找这个问题很多,但我唯一能找到的是“用半角字符替换全角字符”而不是告诉你如何确定字符是否是半角-或全角字。

所以,我的问题是:

是否可以分辨一个单词是半角还是全角?

【问题讨论】:

通常,如果要检查文本,会将其放入兼容性分解形式,例如NFKD。如果这样做,全角拉丁字符变为正常(半角),半角假名/韩文字符变为正常(全角),从而更容易分析文本。你可以在 python 中使用import unicodedata; unicodedata.normalize('NKFD', text) 这是 NFKD,不是 NKFD。 【参考方案1】:

在 unicode 6.1 中,有 Halfwidth and Fullwidth forms、pdf here 块。

在此块内,\uFF01-\uFF60\uFFE0-\uFFE6 是全角,而 \uFF61-\uFFDC\uFFE8-\uFFEE 是半角。

【讨论】:

\u00F01-\uFF60错了,应该是\uFF01-\uFF60 @Lelouchcr 已修复!感谢您在回答后 3 年的更正! 这并不是一个完整的答案。半角和全角形式之外的字符可以是半角或全角,因此仅使用该块图作为参考会使绝大多数 Unicode 未定义。 @LaurenceGonsalves 没有定义字符宽度的标准;这种现有的宽度指定(半/全)仅在某些情况下才有意义。另请参阅 this answer 关于 wcwidth,它将全宽指定为 2 列,而每隔一个普通字符指定为 1 列宽。【参考方案2】:

我认为这是一个很难回答的问题,除非您对什么是半角字符和什么是全角字符有明确的标准。如果您可以决定,那么您可以根据 Unicode(或任何编码方案)中的某些范围测试单词中的字符。

Unicode 块Halfwidth and Fullwidth Forms 仅向您显示哪些字符具有替代形式。对于此块中没有的任何内容,您必须确定您认为的半角和全角。

我想大多数西方字符是半角,大多数东方字符是全角,但两者都会有例外。正如this Unicode report 所强调的那样,也存在歧义。

This proposal 包括code,它似乎将字符分为全半角和模棱两可的宽度。您可以使用这些代码点作为起点。

【讨论】:

【参考方案3】:

如果一个单词的字符是全角的,那么它就是全角的。您需要查看 unicode 规范并查看哪些字符范围是全角的,然后检查每个字符。

【讨论】:

以上是关于如何区分一个单词是半角还是全角?的主要内容,如果未能解决你的问题,请参考以下文章

JS如何判断文字是全角还是半角(转载)

输入法全角空格和半角空格的区别

怎么把文字的全角符号切换成半角

输入法全角半角怎么切换?(右下角输入法右键--> 全半角--> 选择半角还是全角)

sql里面的空格区分全角和半角么

如何在word中转换全角与半角空格