「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>文字コード]]

* 目次 [#rfbf5177]
#contents

*概要 [#webb551d]


*前提知識 [#uae90c81]

**外字 [#h11be54f]
外字(環境依存文字)とは、

-一般的な文字集合(キャラクタ セット)に含まれない文字のことをいう。
-日本で一般には、JIS規格の文字コード(通常はJIS X 0208、稀にJIS X 0213やJIS X 0221)に含まれない文字のことを指す。
-外字は、あらかじめどのコードにどの文字を入れているかを同期させている場合を除き、別の環境とのデータのやり取りができない。そのため、外字を使用することは好ましくないとされる。
-メーカなどがシステムにあらかじめ組み込んでいた外字をシステム外字(ベンダ定義文字)と呼び、個々のユーザが作成した外字はユーザ外字(ユーザ定義文字)と呼ぶ。

***JIS X [#k6fc05a8]
-JIS X 0208 : 1997~
0xF000 ~ 0xFFFCに外字を入れることを原則禁止
-JIS X 0213 : 2000~
0xF000 ~ 0xFFFCの領域を外字領域として使用
-JIS X 0221 (Unicode)~
以下の領域を外字領域として使用
--U+E000 ~ U+F8FF、
--U+000F0000 ~ U+000FFFFD、
--U+00100000 ~ U+0010FFFD

***Windowsの機種依存文字(外字)について [#u0daa605]
Windowsの機種依存文字(外字)である、

-Windowsの外字(環境依存文字)
-システム外字(ベンダ定義文字)
-ユーザ外字(ユーザ定義文字)

の外字は、Shift_JISの0xF040 ~ 0xF9FCはUnicodeのU+E000 ~ U+E757に順番に対応付けられている(Shift_JISで0xF07Fなどの使用不可能なコードポイントは飛ばす)。

このため、Windows中では、

-外字(環境依存文字)
-システム外字(ベンダ定義文字)
-ユーザ外字(ユーザ定義文字)

のUnicode ⇔ Shift_JISのエンコーディングがサポートされる。

Windows付属の外字エディタではU+E758~U+F8FFにも外字を作成可能であるが、そこに作成したものはUnicode環境でのみ使用可能となる。~
なお、WingdingsなどのシンボルフォントのグリフはUnicodeではU+F020 ~ U+F0FFに対応付けられている。

-[参考]:マイクロソフト サポート オンライン
--[IME] 外字エディタを使用して外字を作成する方法~
http://support.microsoft.com/kb/416747/ja
--Unicodeの私用領域U+F020-U+F0FFの範囲がシンボルフォント用に使用されている~
http://support.microsoft.com/kb/900284/ja

***Wikipedia [#k8302944]

-文字コード - Wikipedia > 外字~
http://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89#.E5.A4.96.E5.AD.97

-マイクロソフト標準キャラクタセット - Wikipedia~
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%BD%E3%83%95%E3%83%88%E6%A8%99%E6%BA%96%E3%82%AD%E3%83%A3%E3%83%A9%E3%82%AF%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88~
>マイクロソフト標準キャラクタセットは、Windowsにおいて特別なフォントを~
自前で用意することなく表示できる日本語の文字集合のことである。

**Windowsの外字設定 [#b4fcc6e0]

--外字エディタのUIから行います。

--外字の設定用のWin32 APIは存在しないようです。

--外字設定は外字ファイルに反映されるので、外字ファイルの差替えで設定可能です。

--マイクロソフトは、作成した外字を他のマシンで使用することをサポート外としています。

---しかし、プログラム(Win32 API)からの設定方法は存在しないため、~
設定作業を自動化する場合は、ファイルの差替えで対応するしかありません。~
このため、このような外字差し替え操作はセルフサポート(自己責任)で行う必要があります。

*基本情報 [#y3d882a0]
-外字エディタを使用して外字を作成する方法~
http://support.microsoft.com/kb/881004/ja
-Windows で外字エディタを使用して外字を作成する方法~
http://support.microsoft.com/kb/416747/ja

--作成した外字は登録するフォントごとに*.TTE、 *.EUF ファイルに格納されます。

--外字作成時に [すべてのフォントにリンクする] を選択した場合には、EUDC.TTE、および EUDC.EUF という名前のファイルに格納されます。

--外字作成時に [指定したフォントにリンクする] を選択した場合には、任意のファイル名で拡張子が .TTE、.EUF の各ファイルに格納されます。

--拡張子が .TTE のファイルは外字フォントのデータが格納され、.EUF のファイル は外字フォントの管理に使用されます。

--注意:作成した外字を他のマシンで使用することは動作保証外となっております。同一マシン内でのみご使用ください。~

-外字を入力する~
http://office.microsoft.com/ja-jp/word-help/HA010203239.aspx

-IME 2003 または IME 2002 で外字を入力する方法~
http://support.microsoft.com/kb/881005/ja

**外字の文字コード [#x04b4210]
***外字の範囲 [#c848ebfd]
-ユーザー定義外字 ‐ 通信用語の基礎知識~
http://www.wdic.org/w/WDIC/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E5%AE%9A%E7%BE%A9%E5%A4%96%E5%AD%97

>>Unicode環境では、次の領域がユーザー定義外字領域とされている。
-BMP領域 U+E000‐U+F8FF (6,400字)
-15面 U+F0000‐U+FFFFD (65,534字)
-16面 U+100000‐U+10FFFD (65,534字)

>>シフトJISの0xF040~0xF9FCは、U+E000~U+E757に割り当てられている。~
Windowsの外字エディタは、文字セットをUnicodeにするとU+E000~U+F8FFまでを利用できるが、~
U+E758~U+F8FFはシフトJISでは表現できないためUnicode専用となる。

***外字とエンコーディング [#ofbe4000]
IMEパッドから、1つの外字にUnicode、UTF-8、シフトJISの3つの文字コードが表示されている事が確認できます。~
このため(プラットフォームに依存するかもしれませんが、)上記3つのコード間でのエンコーディングは可能と考えます。~
#確認のためにはエンコーディングによる変換の可逆性をテストとすると良い。~

-IMEパッド外字.png~
#ref(IMEパッド外字.png,left,nowrap,IMEパッド外字)

**外字ファイルの更新・移植 [#n978e872]
***外字ファイルを更新する方法 [#dc0d429f]
EnableEUDC 関数を使用する。~

-SDK32:外字ファイルを更新する方法~
http://support.microsoft.com/kb/413278/ja

>外字ファイルを更新するときには、ファイルをコピーする前に、EnableEUDC 関数の引数に FALSE を指定してシステムの外字の使用を一時停止し、コピー終了後、EnableEUDC 関数の引数に TRUE を指定して外字の使用を再開します。この操作を行なわないと、既に同じ名前のファイルがシステムに登録されている場合は、ファイルのコピーが失敗し、同じ名前のファイルがない場合でも、外字ファイルは、即座に更新されません。EnableEUDC は、GDI32.LIB に登録されていないため、実行時に関数のアドレスを取得する必要があります。~

-EnableEUDC function~
http://msdn.microsoft.com/en-us/library/windows/desktop/dd162593.aspx
>This function enables or disables support for end-user-defined characters (EUDC).~
この機能は、外字のサポートを「有効」・「無効」にします。
>>Community Additions(コミュニティー追加分)~
>>>Support for EUDC needs to be enabled and is a per-session setting.~
外字のサポートは「有効」である必要があり、セッション毎のセッティングです。

***外字(ファイル)の移植(は、動作保証外) [#q623a39c]

-外字をほかのパソコンに移したい - デジタル - 日経トレンディネット~
http://trendy.nikkeibp.co.jp/article/qa/os/20030131/103639/
>Windowsは、「プログラム」メニュー→「アクセサリ」にある「外字エディタ」を使うことで、ユーザー好みの字形を扱える「外字」を作成できます。しかし現在、マイクロソフトの方針では、「作成した外字を他のマシンで使用することは動作保証外」です。(Windowsには外字を作成するための「外字エディタ」の機能がある。作成された外字はEUDCなどの名前が付いたファイルに保存される)ただ、編集部で試したところ、外字を移せる場合もありました。ご参考のために、その方法を以下に記述します。ただし、これで外字が移せるとは限りません。システムに不具合が出ない保証もありません。試す場合は自己責任となります。 

-外字をほかのパソコンに移す方法は?~
http://pc.nikkeibp.co.jp/article/NPC/20060329/233790/
>マイクロソフトでは、外字ファイルを他のパソコンで使用することはサポート対象外としています。~
以下の手順で外字をほかのパソコンに移すことができますが、あくまでも自己責任となります。

-外字コピー屋さん Version 2.5~
http://www.eastvalley.or.jp/cpeudc/
>このソフトは外字ファイルが異なるOSで使用できることを保証するものではありません。~
また、外字を他のPCで使用することや、異なるOS間で共有することは、~
マイクロソフトのサポート外のことですので、あくまでも自己責任の範囲でお使いください。

**フォント [#wea5123d]
Windows でフォントをインストールまたは削除する方法~
http://support.microsoft.com/kb/314960/ja

***Font Link機能 [#yc49d8e3]
Windows 2000-XPのFont Link機能(Font Linking)の紹介~
http://blue.ribbon.to/~akene/fontlink.htm~
>フォントの組み替えができるFontLink 機能(原語はability) は、~
どうやら英語版Windows CE (iPAQなど) の日本語化ページでしか~
紹介されてようなので、紹介ページを作ってみました。

***サンプルコード [#a508bb20]
Accessむかむか-[再起動しないで外字を設定する]~
http://www.sanryu.net/acc/tips/tips161.htm

>'MS Pゴシックにフォントをリンクする

*問題と対策 [#g1cb6407]

**Session0の問題 [#e073c38a]
**[[Session 0>(ログオン)セッション#v4f7425e]]の問題 [#e073c38a]
(Vista以降のサービスでの外字利用)~

-なぜWindowsのログオンする際にCtrl + Alt + Delが必要? - 新日々此何有哉~
http://d.hatena.ne.jp/kkamegawa/20100308/p1~
>もうひとつ、意外と見落とされますが、外字(EUDC)があります。外字はWindowsのログオンユーザーごとに設定されます。したがって「誰かがログオンしていないと外字が使えない」という現象が発生します。これを救うためのAPIであるEnableEUDCなんてのも用意されています。・・・したがって、サーバーで帳票を作るような場合、そして外字を使うようなシステムでは日夜自動ログオンがあるとかないとか・・・。・・・これもWindows Server 2008でサービス(Session 0)とユーザーセッション(Session 1以降)が分離されてしまったので、サービスで外字を出したい場合は前述のEnableEUDC()を呼び出すことになります。ただ、このAPI、そこそこ失敗するので、かなりどきどきです。
>もうひとつ、意外と見落とされますが、外字(EUDC)があります。外字はWindowsのログオンユーザーごとに設定されます。したがって「誰かがログオンしていないと外字が使えない」という現象が発生します。これを救うためのAPIであるEnableEUDCなんてのも用意されています。・・・したがって、サーバーで帳票を作るような場合、そして外字を使うようなシステムでは日夜自動ログオンがあるとかないとか・・・。・・・これもWindows Server 2008でサービス([[Session 0>(ログオン)セッション#v4f7425e]])とユーザーセッション([[Session 1>(ログオン)セッション]]以降)が分離されてしまったので、サービスで外字を出したい場合は前述のEnableEUDC()を呼び出すことになります。ただ、このAPI、そこそこ失敗するので、かなりどきどきです。

-メモ。[Tips][Windows7]XPモードで、シームレスモードを利用すると外字が表示できない~
http://d.hatena.ne.jp/nagasama/?of=18~
--シームレスモードでアプリケーションを動作させると外字が表示されないみたい。

--XPモードのシームレスモードは、RemoteAppと同じ技術みたいだから、~
RemoteAppでも同じことがおきるのではないか?~
と思って試してみるとやっぱり外字が表示されない。

--なるほど、「ユーザーがログオンしていないと使えない」、そして、~
EnableEUDC APIを呼び出させばよいのか!!ということで、KB413278に~
乗っているサンプルをそのまま使って、実行ファイルを作ってみた。~
呼び出してみると、確かに外字がいきなり使えるようになった。

--Vista以降の場合は、Session0の分離よりサービスで外字を利用する場合は、~
--Vista以降の場合は、[[Session 0>(ログオン)セッション#v4f7425e]]の分離よりサービスで外字を利用する場合は、~
同様に表示されないから、EnableEUDC APIを呼び出さなければならない。

--なぜ外字エディタを起動しないとXP Modeで外字が表示されない?~
http://d.hatena.ne.jp/kkamegawa/20091123/p1
---Windows 7の XP Mode で外字を使いたい場合: 世の中は不思議なことだらけ~
http://snow-white.cocolog-nifty.com/first/2009/11/windows-7-xp-mo.html
---Windows 7 XPモード その6 XPモードで外字を利用出来ない。~
 - みゃうのリカバリーをする前に - Yahoo!ブログ~
http://blogs.yahoo.co.jp/akio_myau/40441509.html

>ここでは、EnableEUDC APIを呼び出す方法が提案されているが、~
以下、リンク先は外字エディタを起動する方法で代替されている。

-EnableEUDC function~
http://msdn.microsoft.com/en-us/library/windows/desktop/dd162593.aspx~
>Community Additions(コミュニティー追加分)
>>Support for EUDC needs to be enabled and is a per-session setting. It can be turned on or off using the EnableEUDC Windows API. It is enabled by default by userinit.exe, so usually, nothing needs to be done for standard Windows apps. However, because of session 0 isolation, services running on Windows Vista or later need to call EnableEUDC explicitly otherwise EUDC support will be disabled.
>>外字のサポートはSession毎に「有効」である必要があります。これはEnableEUDC Win32APIを使用してON・OFFできます。通常、userinit.exeによりONに設定されるため、何も行う必要はありませんが、Windows Vista以降で動作するサービスは、Session0隔離のために、EnableEUDCを明示的に呼ばなければ、外字のサポートは無効になります。
>>外字のサポートは[[(ログオン)セッション]]毎に「有効」である必要があります。これはEnableEUDC Win32APIを使用してON・OFFできます。通常、userinit.exeによりONに設定されるため、何も行う必要はありませんが、Windows Vista以降で動作するサービスは、[[Session 0>(ログオン)セッション#v4f7425e]]隔離のために、EnableEUDCを明示的に呼ばなければ、外字のサポートは無効になります。

--userinit.exeについては、こちらが参考になります。

---1週間で学ぶIT基礎の基礎~
 - Windowsユーザーのためのワンポイント・レッスン 第64回:ITpro~
http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20050602/162002/
>ログオン直後に起動するプロセスで、~
ログオン・スクリプトやシェルを実行し、~
各種ユーザー環境を初期化する機能を提供しています。

**帳票印刷と外字 [#sa03e630]
Q:Adobe ReaderでWindows外字(EUDC.tte)6400文字分を表示可能かどうか?~
A:PDF化するツールがサポートしているか、いないかが鍵であるようです。~

-PDF における外字のサポートについて~
http://kb2.adobe.com/jp/cps/233/233284.html

-PDF 作成時に日本語フォントを埋め込む方法(Windows 版 Acrobat 7.0-8)~
http://kb2.adobe.com/jp/cps/225/225564.html

*その他、参考情報 [#v6f61bb2]
-外字登録で一部の私用領域に登録した外字が正しく表示されない~
http://support.microsoft.com/kb/418818/JA
-詳細な印刷機能を有効にして印刷すると外字が印刷されないことがある~
http://support.microsoft.com/kb/2550834/ja

----
Tags: [[:.NET開発]], [[:国際化対応]], [[:文字コード]]



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS