CSSのフォントにArialを設定しているwebページに全角スペースを表示しようとすると、下記2環境で文字幅が異なります。

1.日本語が使用可能なPC
2.海外のPC(日本語不使用)
PCは同一の機種同士で、シングルバイト文字なら同じ幅で表示されます。
原因(もしくは原因の特定法)と、どうすれば両環境で同じ表示にできるかを教えてください。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2006/08/16 23:50:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:kai_kuchiki No.1

回答回数10ベストアンサー獲得回数1

ポイント27pt

一応前提としては双方ともMicrosoft Windowsだということでよろしいですね?

答えは単純で、非CJK環境(中文、和文、韓文)のArialには「全角スペース」、つまりU+3000の情報がないからです。

現在のWindowsは基本的にUnicodeで文字を扱います。TrueTypeやOpenTypeといったフォントセットもUnicodeに対して字形を割り当てています。実際にはWindowsにも各言語版がありますが、全体では同じ文字は同じコードポイント(文字を表す数値と思ってください)で扱っています。

さて、いわゆる「全角スペース」はU+3000というコードポイントが割り当てられています。この字形(形なんかないですが、あえて字形と呼びます)は、和文、中文、漢文などのフォントセットでは定義されていますが、そのほかのフォントセットでは定義されていません。Windowsの規定の動作では、どうやらU+3000を持ってない場合は「似てる文字」であるU+0020、いわゆる「半角スペース」相当の字形で代替表示しているようです(確かではありません。もしかすると他の間隔を表す字形かもしれないです。このへんWindowsの内部動作になってしまうので)。この手の変換に関してはこちらに記事があります(ただし、Windowsの機構そのものを説明してるわけではないと思うので、詳細な動作は異なるはずです)。

ちなみにArialって基本的には欧文フォントで、和文は定義されてないですよね。しかし日本語環境では、日本語文字は日本語文字で見えますし、欧文文字はArialのフォントで見えます。これはWindowsの持つFontLinkという機構が働いています。詳細はリンク先をご参照ください。この機能を活用すれば、他国語環境でも全角スペース(U+3000)を表示できます。単純にArialを指定しても、Arial Unicode MS(こちらはUnicodeのコードポイントの大半の文字がある)が表示側のWindows PC上にあると、Arialにない文字をそこから補う動作も行う可能性があります。このフォントはMicrosoft Officeに付属しています。

さて、では「いろんな環境で見る可能性がある場合に、全角スペース程度のアケを表現する場合にどうしたらいいのか?」というと、HTML/XHTMLの文書でしたら、単純に実体参照を使えばよいでしょう。一覧はこちら。私なら、m文字幅スペース(活字体のmと同じ幅のスペースを取る)、すなわち を使うでしょう。

id:Ohk

原因について、大変参考になりました。

但し、質問には記載しなかったのですが、当現象はSAP社製品のエディタに定義するテキストをWebページに出力する際に発生しているので、実体参照などはちょっと厳しいようです。

2006/08/14 09:51:55
id:fonya3 No.2

回答回数238ベストアンサー獲得回数10

ポイント27pt

全角スペースではなく、実態参照の半角スペース2個に

変えてみたらどうですか。2バイト文字の表示が出来ない

ブラウザの2バイト文字の表示を考えるのは無理があります。

http://wiki.harunaru.com/nob/Character.html

id:Ohk

1.の返信に記載した通り、SAP社製品のエディタに定義することが前提です。

ご指摘の半角スペース2個ですが、複数個の半角スペースはWebページ表示の際に自動的に詰まってしまい対応不可です。

CSSは設定可能ですが、半角スペースを詰めない設定はあるのでしょうか?

2006/08/14 09:56:04
id:fonya3 No.3

回答回数238ベストアンサー獲得回数10

ポイント26pt

> 半角スペース2個ですが、複数個の半角スペースはWebページ表示の際に自動的に詰まってしまい対応不可

ただの半角スペースの連続は確かにひとつの半角スペースとして

しか表示されませんが、 (便宜上2バイト文字で記述)

はいくつ連続して記述してもちゃんとその数の分だけスペースが入ります。

SAP社のエディタが何を表すのか分かりませんが、ABAPエディタ

で書いたWRITE命令で書き出される半角スペースも に

変換してから出力すればHTML的に見たときにちゃんと複数個の

スペースとして表示されるのではないでしょうか。ABAPからのHTML出力は経験が

ありませんのでなんとも言えませんが半角スペースを 

に変換してからHTMLへ出力するのはWebアプリ的には常識です。

たぶん、ABAPの場合はGUI向けの表示とHTML表示の折り合い

をどう付けるかが悩みどころかと思いますが、折り合いが

付かないなら妥協することも必要でしょう。例えば、preタグ

でフォーマットするとか。。。

データ上の半角スペースはHTMLでは に変換してから

出力する、これは定石とお考えください。

http://www.2ones.com/bidders+/index.php?tag=%E5%85%A8%E3%81%...

id:Ohk

SAP社のエディタは、Bexクエリデザイナというエディタで、パラメータ設定によるクエリ作成ツールです。

従って言語でコーディングする手のモノではなく、パラメータ設定や、単純なテキスト入力にしか対応してません。

手を入れられるとすれば、CSSくらいと思っていますが・・・

2006/08/15 23:31:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません