perl 判断中文字符

lidawei123 2009-04-07 10:25:38
用perl 如何判断读入的字符串是否是中文字符?

正则中应该如何写?
...全文
1123 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjccn_wx 2009-04-21
  • 打赏
  • 举报
回复
楼主的需求已经超出匹配字符的范畴了,
多语种智能翻译?神啊
Steve 2009-04-16
  • 打赏
  • 举报
回复
日文环境Excel,输出到CSV应该是SHIFT_JIS吧.
梦无痕123 2009-04-16
  • 打赏
  • 举报
回复
$line =~/[\u4e00-\u9fa5]/
xsir317 2009-04-15
  • 打赏
  • 举报
回复
编码方式不一样的话,自然是不一样的。。。

但是如果都是utf-8呢?

excel里面读出来的,你自己比比吧,我就不多说了。。。
725137 2009-04-15
  • 打赏
  • 举报
回复
日语中虽然有些字和中文看起来是一样的.比如
"人间",看起来是一样的.但是他们的编码方式却不一样.中文模式下可能是gbk,或gb2316这些编号.日语模式下可能是sjis等.所以可以根据编码来判读.你要是在日语中间复制一个gbk中的"人间"到日语中的话,那么纯sijs看起来就会是乱码.所以你大可放心.
xsir317 2009-04-09
  • 打赏
  • 举报
回复
你不觉得你业务逻辑有问题么?

就算是用人工来判断也无法判断吧,这个字又是中文又是日文,没有上下文环境,你没有任何道理去否定它说它不是中文或者不是日文。

就算是手工来做也没办法做。

就好比一个黑人和白人的混血儿,你要查找“黑人的后代”和“白人的后代”,他都是。所以这种问题本身没办法处理。。。

类似问题:判断一个英文字符串是英文单词还是汉语拼音

“data”

那么你回答我,这个是英文单词呢,还是汉语拼音呢?
lidawei123 2009-04-09
  • 打赏
  • 举报
回复
楼上的说的太对了,现在就是要处理单独出现的日文汉字

平假和片假很好处理

就你举的例子来说 “比如单单一个“人”字,你说是日文还是中文?” 现在就是要check出来 这个人字到底是汉字还是日文

这个不知道以前有你有人搞过,真的就搞不定了么?




lidawei123 2009-04-09
  • 打赏
  • 举报
回复
符号表只能判断出一部分,日文中的汉字如果真要如“xsir317”所说:“跟中文某些字一模一样“;的话就没有什么办法了
xsir317 2009-04-09
  • 打赏
  • 举报
回复
简单来说,用“shanxia”或者用“やました”输入的“山下”两个字,在excel的一个单元格里面,这就是完全一致的数据,没有上下文就无法区分。
xsir317 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lidawei123 的回复:]
你举的例子根本偏离主题,就是因为人工看不出来才需要从语言的编码方面寻找答案。

你这个人思想怎么总是看表面问题,即使找不到真正有效解决问题的答案,讨论这个问题也是很有意义的
[/Quote]
日文的日汉字编码有一部分和中文重叠,字词也有一部分完全一样

如果没有上下文语境,那么它们从根本上就是同一个字符串,判断个毛啊。。。

你不从表面看,你深入看一下试试啊。。。
DDGG 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lidawei123 的回复:]
用编码区间很难匹配的就是 日文中的汉字 如:色管理 艶 闖 等等。。

这些字都会被认为日文之外的字。 高手们有什么好办法处理?
[/Quote]

日文单字不多吧,英文也不多,写一个正则表达式,如果匹配到除了这些字符以外的字符,就认为是中文。
只是提供一个思路,要我写这个正则是写不出来,对日文编码不熟悉,楼主也许可以参考上面ecitnet列的符号表。
lidawei123 2009-04-09
  • 打赏
  • 举报
回复
你举的例子根本偏离主题,就是因为人工看不出来才需要从语言的编码方面寻找答案。

你这个人思想怎么总是看表面问题,即使找不到真正有效解决问题的答案,讨论这个问题也是很有意义的
wx红杉树 2009-04-08
  • 打赏
  • 举报
回复
# 半角スペース
$spc = '\x20';

# 全角スペース
$eSpc = '(?:\xA1\xA1)'; # EUC-JP
$sSpc = '(?:\x81\x40)'; # SJIS

# 全角数字 [0-9]
$eLng = '(?:\xA3[\xB0-\xB9])'; # EUC-JP
$sLng = '(?:\x82[\x4F-\x58])'; # SJIS

# 全角小英字 [a-z]
$estr = '(?:\xA3[\xE1-\xFA])'; # EUC-JP
$sstr = '(?:\x82[\x81-\x9A])'; # SJIS

# 全角大英字 [A-Z]
$eStr = '(?:\xA3[\xC1-\xDA])'; # EUC-JP
$sStr = '(?:\x82[\x60-\x79])'; # SJIS

# 全角ひらがな [ぁ-ん]
$eHira = '(?:\xA4[\xA1-\xF3])'; # EUC-JP
$sHira = '(?:\x82[\x9F-\xF1])'; # SJIS

# 全角カタカナ [ァ-ヶ]
$eKana = '(?:\xA5[\xA1-\xF6])'; # EUC-JP
$sKana = '(?:\x83[\x40-\x96])'; # SJIS

# 半角カタカナ [ヲ-゜]
$ekana = '(?:\x8E[\xA6-\xDF])'; # EUC-JP
$skana = '[\xA6-\xDF]'; # SJIS

# EUC-JP文字
$euc1 = '[\x00-\x7F]'; # 1byte EUC-JP文字
$euc2 = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'; # 2byte EUC-JP文字
$euc3 = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'; # 3byte EUC-JP文字
$euc = "(?:$euc1|$euc2|$euc3)"; # EUC-JP文字
wx红杉树 2009-04-08
  • 打赏
  • 举报
回复
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
lidawei123 2009-04-08
  • 打赏
  • 举报
回复
就是日文的excel文档中可能会有中文,现在就是要检查这个excel中是否有中文

用编码区间判断不行。 日文和中文有一部分区间重叠

用返回编码格式判断也不行,遇到日文平假名返回不准确

楼上说的\p 是perl 里面的参数么,不大了解
xsir317 2009-04-08
  • 打赏
  • 举报
回复
你先说说你的字符串有些什么特点?

比如“介绍”就是一个中文词,“绍介”就是日文。或者有假名存在的字符串认为是日文,完全没有假名的认为是中文?

既然编码有重复,那么你是如何判断它是中文还是日文呢?

比如单单一个“人”字,你说是日文还是中文?

可能你的需求根本无法用任何方式做出来。一份日文文档,某一行出现了两个字 “人间”,如何认定?根本无法认定。
lidawei123 2009-04-08
  • 打赏
  • 举报
回复
用编码区间很难匹配的就是 日文中的汉字 如:色管理 艶 闖 等等。。

这些字都会被认为日文之外的字。 高手们有什么好办法处理?

lidawei123 2009-04-07
  • 打赏
  • 举报
回复
补充一下,是区分Excel的中文和日文
iambic 2009-04-07
  • 打赏
  • 举报
回复
用\p{Han}匹配汉子。
iambic 2009-04-07
  • 打赏
  • 举报
回复
什么叫"是区分Excel的中文和日文"?

37,741

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧