Dear Martin,

I can use perl 5.6. In fact I'm using it. I thank you for your code, but I need to 
write the
converted words in UTF-16 to a database and not to a text file. We were using the text 
file for
output only to see if the conversion was being properly done. But our true objective 
was (it still
is) to read a text in UTF-8 and parse it (for which Perl seems to be the best option) 
and write the
parts resulting from the parse to a database (Access for starts and then to MS SQL 
Server).

Nevertheless thank you for your suggestions and your code.

Best regards.

Rui Ribeiro

> Dear Rui,
>
> I probably missed the start of this thread where you said that you couldn't
> use Perl 5.6. But if you could use Perl 5.6, then something like this would
> work:
>
> open(INFILE, "<$ARGV[0]") || die "Can't read $ARGV[0]";
> open(OUTFILE, ">$ARGV[1]") || die "Can't write $ARGV[1]";
> binmode OUTFILE;
>
> print OUTFILE pack('v', 0xfeff);
> while(<INFILE>)
> {
>     s/\n$/\015\012/o;
>     print OUTFILE pack('v*', unpack('U*', $_));
> }
>
> close(OUTFILE);
> close(INFILE);
>
> Some thoughts on this code, which I use.
>
> 1. It is set up to work in the Windows environment, hence the newline tidy ups and 
>the
> use of 'v' for packing.
> 2. It doesn't support surrogates. But you could get around this by changing the key 
>line
> to something like (this is untested):
>
> $s = $_;
> print OUTFILE pack ('v*' map {$_ > 0xFFFF ? (($_ >> 10) + 0xD800, ($_ & 0x3FF) + 
>0xDC00)
> : $_} unpack ('U*', $s));
>
> HTH,
> Martin
>
>

Reply via email to