我有一个简单的单词来计算单词,它只计算英语单词而且看不到cp-1256中编码的阿拉伯语单词,这是我主要考虑的问题。我在Windows 8上工作 以下是该文件的示例:
文字إذااعتبرناجوجولوتشيكوفهمارئداالقصةفيالعالمفإننانعتبرالدكتوريوسفإدريسهوأميرالقصةالقصيرةلديالعربإذحققللقصةالقصيرةفيمصروالعالمالعربينقلةنوعيةمنحيثالبناءوالفكرةوالطرح,كانذلكبينأواخرالخمسينياتوطوالالستينياتورغمالتطورالنوعيالفارق الذيأحدثهفيمايتعلقبفكرةالتحديث, إلاأنقصصهكانتلصيقةبالحياةومتقاطعةمعقطاععظيممنالبشرالمهمشين,خاصةمنخلالمجموعاتهالقصصية«بيتمنلحم»و«لغةالأيآي»و«أرخصليالي»وقدولديوسفإدريس«زيالنهارده»منعام1927年في«البيروم» بمحافظةالشرقية。 وليوسفإدريسنحوعشرينمجموعةقصصيةوخمسرواياتكانمنها«الحرام»و«قاعالمدينة»«والنداهة»وكانتأعمالهالقصصيةقدترجمتللكثيرمناللغاتالأخريومنهانحو65قصةترجمتللروسية, وكانيوسفإدريسقدكتبللأهرامسلسلةمنالمقالاتالتيصدرتمجمعةمنكتابيحملعنوان«فقرالفكروفكرالفقر»وكانقدحصلعليجائزةالدولةالتشجيعيةعام1966, وقيلإناسمهكانمدرجاضمنالمرشحينلجائزةنوبلعام1988والتيحظيبهانجيبمحفوظ,وكانلهفيذلكهجومشهير。 وليوسفإدريسعددمنالمسرحياتكانمنها«الفرافير»و«المخططين»و«البهلوان»و«اللحظةالحرجة»و«المهزلةالأرضية»و«الجنسالثالث»。 文本
while (<>) {
@words = split(/\W+/);
foreach $word (@words) {
$count{$word}++;
}
}
foreach $word (sort by_count keys %count) {
print "$word occurs $count{$word} times\n";
}
sub by_count {
$count{$b} <=> $count{$a};
}
我有一个旧脚本,上面有这些并且工作正常,但现在它不是
use win32;
use POSIX 'locale_h';
use locale;
答案 0 :(得分:4)
您应该设置输入流的编码。
use open IN => ':encoding(cp1256)'; # For "script file"
binmode STDIN, ':encoding(cp1256)'; # For "script <file"
如果您还想输出cp1256,可以用
替换上面的两个use open ':std', ':encoding(cp1256)'; # All input and output
答案 1 :(得分:0)
仅仅为了知识我改变了print语句进行排序
foreach $word (sort by_count keys %count) {
printf "%5d \t %s\n", $count{$word}, $word;
感谢