Unicode文字の表示について

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: Unicode文字の表示について

by THEREMIN » 2007年2月19日(月) 01:00

そのものズバリのものを・・・ありがとうございます。
いつも返信早いですねえ 見習いたいです

>Windows 9xがUnicode対応でないことないのが問題
趣味で自分のために作るプログラムですから、まず自分の環境で動けばほぼ満足してしまうので、
そこんとこは問題ないです。でも9x系の開発は大変そうだなぁ

>TextOutW
>MessageBoxW
そっか、単純にWを付けて検索すればいいのか!
これ知らないと結構はまりますね。Declareで関数宣言して参照エラーが起きると、
初心者はそこでストップしてしまいますから。

>StringをUnicode (UTF-16)化
個人的には、EX指定のようにUnicode文字列を指定して代入できたりすると
いいんじゃないかな、と思います。検索したら、Cでできるみたいなんで。

Byte型の処理の仕方がだんだん分かってきました。
インターネットってホント便利です。

by イグトランス » 2007年2月19日(月) 00:33

現在のABでは宣言がなかったり言語仕様からの支援がないため使い辛いですが,Windows NTは本来全ての文字に関わる処理をUnicode (UTF-16 LE)で処理しており,API関数もUnicodeを引数に取るものが用意されています。

ただしWindows 9xがUnicode対応でないことないのが問題です。しかし例外的にごく少数の関数だけが9xでもUnicode版も実装されています。
http://support.microsoft.com/kb/210341/en

とりあえず表示に関しては,MessageBoxとTextOutが比較的簡単に使えるでしょう。

コード: 全て選択

Declare Function TextOutW Lib "gdi32" (hdc As HDC, nXStart As Long, nYStart As Long, pString As *WCHAR, cbString As Long) As BOOL
Declare Function MessageBoxW Lib "user32" (hwnd As HWND, pText As *WCHAR, pCaption As *WCHAR, uType As DWord) As Long
ほかにはリッチエディットやIEコンポーネントをUnicode表示に使うことができます。

ABでは今のところUTF-16の文字を扱う型としてWCHARがあります(WordのTypeDefですが)。
UTF-16文字列ではByte配列の代わりにWCHAR配列として扱えばよいです。

#ちなみにAB5ではStringをUnicode (UTF-16)化しようかという案も出ています。

Unicode文字の表示について

by THEREMIN » 2007年2月18日(日) 23:44

いつもお世話になります。
UTF-16LE BOM付きテキストを読み込んで表示するプログラムを作っているのですが、どうやったら文字を表示できるのかが分かりません。
MakeStr()を使おうにもByte型は1byteだし、かといってWord型で作ったところで自分のスキルでは文字表示できません。
シフトJISコードならMakeStr()を使って表示できるみたいですが・・・
なぜUnicodeテキストなのかというと、自作のWSHプログラムでファイルパスを取得しテキストファイルに保存しているためで、
XPではパスにUnicodeを使えるから念の為、保存するテキストの種類をUTF-16にした経緯です。
表示するには、WideCharToMultiByte関数などを使ってANSI文字列に変換しないとダメなんでしょうか?
もしできるなら、具体的にどのようなコードを書けばよいのでしょうか?

ページトップ