Hi eventual,
On Monday 25 Apr 2011 06:22:54 eventual wrote:
I am using windows operating system.
I wanted to rename some files within certain directories and my files
contain chinese characters. After renaming, I could not see those chinese
characters, what must I do to retain those chinese characters. Below is
the file name and the script. Thanks
file name = 141有多少爱可以重来 迪克牛仔.mp3
after renaming the file is testing123~1.MP3
I don't have the right font (hoping this message was indeed Unicode, and
declared the encoding right), and I have not worked programaticaly with
Unicode filenames in Windows (being Linux-hosted, etc.). It seems that Perl
has been gaining some popularity as a scripting and programming tool for
Windows systems, which sounds encouraging.

A few comments on your code though.
===== script as follows =========
Always add "use strict;" and "use warnings;". It will prevent many common
errors. (Many people believe that it's a step forward because then you have to
declare many variables, but it's a descent for the purpose of short-term and
long-term ascent, and *is* necessary.)

Your editor should have a way to add it automatically for every file. I don't
know what it is, but you should use https://duckduckgo.com/ or
http://www.google.com/ for that. (It is believed that duckduckgo is better for
many software development-related searches and for Perl especially.).
use File::Copy; Nice!
my $directories = 'd:\\test' ;
Is it "directories" or "directory"? Also see:


It better be "dir_path" or "dir_pathname" or whatever.
opendir (MYHANDLE , $directories) || die "Cant open directories :$! ";
You should avoid using global file handles, but it shouldn't matter here.
my @files = readdir MYHANDLE;
closedir MYHANDLE;
Nice idiomatic Perl but see File::Spec's no_upwards:


There are also some convenient abstractions over File::Spec and similar
modules that you may wish to use:

* http://perl-begin.org/uses/sys-admin/
foreach (@files) {
Don't iterate with $_ for anything half-serious like that. Use "foreach my
$filename (@filenames) {".
if (/(^141)(.+$)/){
my $original = $_;
rename "$directories\\$original", "$directories\\$_";
OK, you really should use File::Spec here.
print @files;
You probably want print map { "$_\n" } @files;


Shlomi Fish

Shlomi Fish http://www.shlomifish.org/
"Star Trek: We, the Living Dead" - http://shlom.in/st-wtld

English spelling aims to be consistent. Publicly and methodically.

Please reply to list if it's a mailing list post - http://shlom.in/reply .

Search Discussions

Discussion Posts


Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 3 of 3 | next ›
Discussion Overview
groupbeginners @
postedApr 25, '11 at 3:23a
activeApr 25, '11 at 9:12a

2 users in discussion

Eventual: 2 posts Shlomi Fish: 1 post



site design / logo © 2021 Grokbase