所以我有一个UTF8编码的字符串,它可以包含全角汉字,全角假名,半角假名,罗马吉,数字或卡哇伊日语符号,如★或♥。
如果我想要这个长度,我会使用mb_strlen(),它会把它们的长度都计算为1。这在大多数情况下都是可以的。
但是,我被一个日本客户要求只把半角假名算作0.5 (为了计算文本字段的最大长度),因为这显然是日本网站的做法。我使用mb_strwidth()来实现这一点,它将全宽计算为2,半宽计算为1,然后除以2。
但是,此方法也会将romaji字符计数为1,因此像Chocアイス这样的字符也会计数为7。然后我除以2来计算汉字,得到3.5。但我实际上想要5.5 (4个Romaji + 1.5个半角假名)。
// EDIT:更多信息:任何字符(即使不是假名)都应该是全宽为1,半宽为0.5。例如,像¥、3@(这样的字符应该都是1,但是像¥,3@(这样的字符应该都是0.5
//额外编辑:像☆和♥这样的符号应该是1,但是mb_strwidth/2方法返回它们为0.5
日语系统有计算字符串长度的标准方法吗?或者每个人都只是遍历他们的字符串并计算不符合标准宽度规则的字符?
发布于 2011-04-25 11:15:53
所以,我找不到答案。
我通过逐字迭代,检查每个字符,并手动应用我的客户要求的计数规则来修复它。
发布于 2011-04-25 11:57:19
看看Perl的Unicode::GCString模块:它给出了所有Unicode的正确列,包括东亚代码。
它是Unicode::LineBreak的一个底层组件,我发现要对亚洲文字进行正确的文本分割,它是必不可少的。
正如你可能想象的,这两个都是日本制造的™。:)
https://stackoverflow.com/questions/5633039
复制相似问题