ShiftJIS-X0213-MapUTF
view release on metacpan or search on metacpan
=back
=head2 Conversion from Unicode to SJIS-X
If the first parameter is a reference,
that is used for coping with Unicode characters
unmapped to SJIS-X, C<UNICODE_CALLBACK>.
(any reference will not allowed as C<STRING>.)
If C<UNICODE_CALLBACK> is given, C<STRING> is
the second parameter; otherwise the first.
If C<UNICODE_CALLBACK> is not specified, SJIS-X characters
unmapped to Unicode are silently deleted
and partial bytes are skipped by one byte.
(as if a coderef constantly returning null string, C<sub {''}>
is passed as C<UNICODE_CALLBACK>.)
Currently, only coderefs are allowed as C<UNICODE_CALLBACK>.
A string returned from the coderef is inserted
in place of the unmapped character.
A coderef as C<UNICODE_CALLBACK> is called with one or more arguments.
If the unmapped character is a partial character (an illegal byte),
the first argument is C<undef>
and the second argument is an unsigned integer representing the byte.
If not partial, the first argument is an unsigned interger
representing a Unicode code point.
For example, characters unmapped to SJIS-X are
converted to numerical character references for HTML 4.01.
sub toHexNCR {
my ($char, $byte) = @_;
return sprintf("&#x%x;", $char) if defined $char;
die sprintf "illegal byte 0x%02x", $byte;
}
$sjis2004 = utf8_to_sjis2004 (\&toHexNCR, $utf8_string);
$sjis2004 = unicode_to_sjis2004(\&toHexNCR, $unicode_string);
$sjis2004 = utf16le_to_sjis2004(\&toHexNCR, $utf16le_string);
The return value of C<UNICODE_CALLBACK> must be legal in Shift_JIS-2004.
=over 4
=item C<utf8_to_sjis2004([UNICODE_CALLBACK,] STRING)>
Converts UTF-8 to Shift_JIS-2004.
=item C<unicode_to_sjis2004([UNICODE_CALLBACK,] STRING)>
Converts Unicode to Shift_JIS-2004.
This B<Unicode> is in the Perl's internal format (see F<perlunicode>).
If C<SVf_UTF8> is not turned on,
C<STRING> is upgraded as an ISO 8859-1 (latin1) string.
=item C<utf16_to_sjis2004([UNICODE_CALLBACK,] STRING)>
Converts UTF-16 (with or w/o C<BOM>) to Shift_JIS-2004.
=item C<utf16le_to_sjis2004([UNICODE_CALLBACK,] STRING)>
Converts UTF-16LE to Shift_JIS-2004.
=item C<utf16be_to_sjis2004([UNICODE_CALLBACK,] STRING)>
Converts UTF-16BE to Shift_JIS-2004.
=item C<utf32_to_sjis2004([UNICODE_CALLBACK,] STRING)>
Converts UTF-32 (with or w/o C<BOM>) to Shift_JIS-2004.
=item C<utf32le_to_sjis2004([UNICODE_CALLBACK,] STRING)>
Converts UTF-32LE to Shift_JIS-2004.
=item C<utf32be_to_sjis2004([UNICODE_CALLBACK,] STRING)>
Converts UTF-32BE to Shift_JIS-2004.
=item C<utf8_to_sjis0213([UNICODE_CALLBACK,] STRING)>
Converts UTF-8 to Shift_JISX0213.
=item C<unicode_to_sjis0213([UNICODE_CALLBACK,] STRING)>
Converts Unicode to Shift_JISX0213.
This B<Unicode> is in the Perl's internal format (see F<perlunicode>).
If C<SVf_UTF8> is not turned on,
C<STRING> is upgraded as an ISO 8859-1 (latin1) string.
=item C<utf16_to_sjis0213([UNICODE_CALLBACK,] STRING)>
Converts UTF-16 (with or w/o C<BOM>) to Shift_JISX0213.
=item C<utf16le_to_sjis0213([UNICODE_CALLBACK,] STRING)>
Converts UTF-16LE to Shift_JISX0213.
=item C<utf16be_to_sjis0213([UNICODE_CALLBACK,] STRING)>
Converts UTF-16BE to Shift_JISX0213.
=item C<utf32_to_sjis0213([UNICODE_CALLBACK,] STRING)>
Converts UTF-32 (with or w/o C<BOM>) to Shift_JISX0213.
=item C<utf32le_to_sjis0213([UNICODE_CALLBACK,] STRING)>
Converts UTF-32LE to Shift_JISX0213.
=item C<utf32be_to_sjis0213([UNICODE_CALLBACK,] STRING)>
Converts UTF-32BE to Shift_JISX0213.
=back
=head2 Export
B<By default:>
sjis2004_to_utf8 utf8_to_sjis2004
sjis2004_to_utf16le utf16le_to_sjis2004
sjis2004_to_utf16be utf16be_to_sjis2004
sjis2004_to_unicode unicode_to_sjis2004
sjis0213_to_utf8 utf8_to_sjis0213
sjis0213_to_utf16le utf16le_to_sjis0213
sjis0213_to_utf16be utf16be_to_sjis0213
sjis0213_to_unicode unicode_to_sjis0213
B<On request:>
sjis2004_to_utf32le utf32le_to_sjis2004
sjis2004_to_utf32be utf32be_to_sjis2004
utf16_to_sjis2004 [*]
utf32_to_sjis2004 [*]
sjis0213_to_utf32le utf32le_to_sjis0213
sjis0213_to_utf32be utf32be_to_sjis0213
utf16_to_sjis0213 [*]
utf32_to_sjis0213 [*]
[*] Their counterparts C<sjis2004_to_utf16()>, C<sjis2004_to_utf32()>,
C<sjis0213_to_utf16()> and C<sjis0213_to_utf32()>
are not implemented yet. They need more investigation
on return values from C<SJIS_CALLBACK>...
(concatenation needs recognition of and coping with C<BOM>)
=head1 BUGS
On mapping between SJIS-X and Unicode used in this module,
notice that:
=over 4
=item *
0xFC5A in both Shift_JIS-2004 and Shift_JISX0213
is mapped to U+9B1C according to JIS X 0213:2004,
although JIS X 0213:2000 mapped it to U+9B1D.
=item *
The following 25 JIS Non-Kanji characters are not included in Unicode 3.2.0.
So they are mapped to each 2 characters in Unicode.
These mappings are done round-trippedly for *one SJIS-X character*.
Then round-trippedness for a SJIS-X *string* is broken.
(E.g. SJIS-X <0x8663> and <0x857B, 0x867B> both are mapped
to <U+00E6, U+0300>; but <U+00E6, U+0300> is mapped only to SJIS-X <0x8663>.)
SJIS-X Unicode 3.2.0 # Name by JIS X 0213:2004
0x82F5 <U+304B, U+309A> # [HIRAGANA LETTER BIDAKUON NGA]
0x82F6 <U+304D, U+309A> # [HIRAGANA LETTER BIDAKUON NGI]
0x82F7 <U+304F, U+309A> # [HIRAGANA LETTER BIDAKUON NGU]
0x82F8 <U+3051, U+309A> # [HIRAGANA LETTER BIDAKUON NGE]
0x82F9 <U+3053, U+309A> # [HIRAGANA LETTER BIDAKUON NGO]
0x8397 <U+30AB, U+309A> # [KATAKANA LETTER BIDAKUON NGA]
0x8398 <U+30AD, U+309A> # [KATAKANA LETTER BIDAKUON NGI]
0x8399 <U+30AF, U+309A> # [KATAKANA LETTER BIDAKUON NGU]
0x839A <U+30B1, U+309A> # [KATAKANA LETTER BIDAKUON NGE]
0x839B <U+30B3, U+309A> # [KATAKANA LETTER BIDAKUON NGO]
0x839C <U+30BB, U+309A> # [KATAKANA LETTER AINU CE]
0x839D <U+30C4, U+309A> # [KATAKANA LETTER AINU TU]
0x839E <U+30C8, U+309A> # [KATAKANA LETTER AINU TO]
0x83F6 <U+31F7, U+309A> # [KATAKANA LETTER AINU P]
0x8663 <U+00E6, U+0300> # [LATIN SMALL LETTER AE WITH GRAVE]
0x8667 <U+0254, U+0300> # [LATIN SMALL LETTER OPEN O WITH GRAVE]
0x8668 <U+0254, U+0301> # [LATIN SMALL LETTER OPEN O WITH ACUTE]
0x8669 <U+028C, U+0300> # [LATIN SMALL LETTER TURNED V WITH GRAVE]
0x866A <U+028C, U+0301> # [LATIN SMALL LETTER TURNED V WITH ACUTE]
0x866B <U+0259, U+0300> # [LATIN SMALL LETTER SCHWA WITH GRAVE]
0x866C <U+0259, U+0301> # [LATIN SMALL LETTER SCHWA WITH ACUTE]
0x866D <U+025A, U+0300> # [LATIN SMALL LETTER HOOKED SCHWA WITH GRAVE]
0x866E <U+025A, U+0301> # [LATIN SMALL LETTER HOOKED SCHWA WITH ACUTE]
0x8685 <U+02E9, U+02E5> # [RISING SYMBOL]
0x8686 <U+02E5, U+02E9> # [FALLING SYMBOL]
=back
=head1 AUTHOR
SADAHIRO Tomoyuki <SADAHIRO@cpan.org>
Copyright(C) 2002-2007, SADAHIRO Tomoyuki. Japan. All rights reserved.
This module is free software; you can redistribute it
( run in 0.607 second using v1.01-cache-2.11-cpan-6aa56a78535 )