Perl

3種類の文字化け原因とPerlでの対応方法

Perlプログラマーは文字化けを回避するために何ができるでしょうか? 一部の文字化けは不可避的なものです。この記事では、文字化けを3種類に分類しその原因をおさらいします。また、プログラミングで解消できる文字化け対策をご紹介します。

井上 みやび子

執筆者:井上 みやび子

Perlガイド

文字化けの種類

前回の記事では、よく起こる波線とハイフン (ダッシュ) の文字化けの原因と、Perlでそれを回避する方法を説明しました。

いわゆる「文字化け」が発生する原因に、実はいくつかパターンがありますので、ここでそれを整理しておきたいと思います。
  • 文字コード変換をした時に対応が見つからず文字化けするもの
  • Shift_JIS系の文字コードの外字が、見る環境によって文字化けするもの
  • 見ている環境で使用しているフォントに、該当の字形が無いもの

早速これらを細かく見て行きます。

文字コード変換をした時に対応が見つからず文字化けするもの

まず一つ目は、文字コード変換した時 (正確には「プログラムでエンコーディングスキームの変更をした時」) に起こる文字化けです。これは、前回の記事で詳しく見た波線のように、変換元と変換先のどちらにも当該字形があるにも関わらず、文字コードの割り当ての違いから変換の対応が見つからずに文字化けするものと、一方に含まれていて他方の日本語文字コードには含まれていない字形が文字化けしてしまうものがあります。

前者の例は件の波線の他、「髙」 (ハシゴ高) や「草彅剛」さんの「彅」があります。後者は例えば、「〠」 (笑顔付の〒マーク、U+3020) です。

Shift_JIS系の文字コードの外字が、見る環境によって文字化けするもの

「外字」というのは一つの文字コード (エンコーディングスキーム) で表現できる文字一覧表の「空きマス」に、各端末メーカーが好きなものを入れて使っている字のことです。ちなみに、「空いていないマス」にはUnicodeやJIS規格で定められた文字が入っています。

ネットワーク時代の今日からすると想像しにくいですが、コンピュータが一般に普及してきた初期には、各コンピューターメーカーがおおらかに自社端末用の外字を設定していました。「ワープロ専用機」を使ったことがある方は、自分で外字を作って登録できたのを覚えている方もいるのではないでしょうか。外字は、同じ端末で読み書きしている分には何の問題もありませんが、他の環境で読まれる場合は当然ながら外字部分の文字化けが生じます。 (このため外字は「機種依存文字」とも呼ばれます。) このケースの文字化けでよく知られているのは Windows の「マル1」が Macintosh では「 (日) 」に見えていた点です (※1)。

※1 最近は Macで「 (日) 」の方が文字化けする場合があります。

どのような文字が外字に当るかは、下記のページが詳しく解説してくれています。

見ている環境で使用しているフォントに、該当の字形が無いもの

「フォントに該当の字形が無い」とは、例えば、文字「あ」は欧文フォント「Times New Roman」では表示できませんよね、ということです。日本語実務において問題となるのは、Unicodeで新たに追加された文字を表示できないフォントがあるということです。例えば「𠮷」(←ツチヨシ、「土」の下に「口」の吉を入力してあります。) は、Windows 7 上のフォント「メイリオ」では表示できますが「MSゴシック」では表示できません。UTF-8で保存されていてデータ的には文字化けしていない場合でも、表示環境でフォントの対応が無ければ文字として表示できないのです。

また、完全な文字化けを起こさない場合でも、ハネの方向や画数などがフォントによって微妙に違う場合もあります。印刷や、正確な漢字での正式名称の記載が必要な場合以外はあまり深刻に問題にしませんが、例えば「葛」の字の下の部分が「人+L」になるか「ヒ」になるかは、見る側が表示に使っているフォントによって異なり、データの調整では回避ができません。
「葛」の異体字

「葛」の異体字


次は:日本語文字化け対応の指針
  • 1
  • 2
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます