waiei -blog-

その日の出来事を簡単に紹介する日記

スポンサーサイト

--------------:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

薬切れ

2009-05-24-Sun-01:30
Web拍手レス
なるほど、早速やってみようと思います。
DDR Xはリミックス解禁したんですねー。
結局最後までクリアできませんでしたが。
○の中には⑨が入ると思いますw
らのっちぇさん
改めてみるとセイバーリミ鬼の途中50連近くの部分が
人間業じゃない気がしますねーw
今日やりに行こうかなと思いましたけど
風邪治らないしインフルで外出控えるよう言われてるし雨だしで
多分無理な予感w

雑談劇場の「背景の謎1」見てたんですけど、
やっぱりH500ってトムさんが「HELP!」って言おうとして
最初の部分を言いにくくて、「h...h.h....(ry」
って500回も言ったんですよね?
(D.J.Sin さん)
CATASTROPHEの文字のとおり大惨事に見舞われた
トムさんが必死になって言ったわけですよっ!




長続き

日記


ちなみにこれ書いてから既に1日経過してるので
薬は完全になくなりました。
つーか最後の1回飲もうとしたら錠剤が行方不明にw






ほとんどの人にはわからない
スーパーマニアック日記はじまるよー\(^O^)/

BDSV3の設定ファイルは、
ワケありでUTF-8で保存しようかなと思ったんですが
HSPではShift-JISが基本コードであるため
そのままでは使えません。
しかし、かろうじでUnicode(UTF-16)も扱えるので
一旦UTF-8をUnicodeに変換しておけば
たとえShift-JISで出せない文字が入っていても(ハートなど)
読み取ることができるわけです。

スクリプトはこんな感じ↓
#uselib "user32"
#func DrawText "DrawTextW" int,wptr,int,int,int
#uselib "kernel32"
#define CP_UTF8         65001   ; UTF-8
#func MultiByteToWideChar "MultiByteToWideChar" sptr,sptr,sptr,sptr,sptr,sptr

//----Unicode(UTF-16)
    sdim h16,64     ;確保
    lpoke h16,0,38<<24|97<<16|254<<8|255    ;Unicodeでハート(255 254 97 38)
                                            ;↓これと同等の処理
    ;poke h16,0,255 : poke h16,1,254 : poke h16,2,97 : poke h16,3,38
    pos 50,50:sysfont 17
    mes "Unicodeの文字を描画"
    font msgothic,150,16
    rect=ginfo_cxginfo_cyginfo_winxginfo_winy     ;文字の描画領域
    DrawText hdc,varptr(h16),-1,varptr(rect),0
    redraw  ;必須

//----UTF-8
;最終的にはUnicodeに変換しないといけない
    sdim h8,64      ;確保
    poke h8,0,239
    poke h8,1,187
    poke h8,2,191
    poke h8,3,226
    poke h8,4,153
    poke h8,5,161   ;UTF-8でのハート(でかすぎフイタw 6byte)
    
    pos 200,50:sysfont 17
    mes "UTF-8の文字をUnicodeと同じように描画"
    font msgothic,150,16
    rect=ginfo_cxginfo_cyginfo_winxginfo_winy     ;文字の描画領域
    DrawText hdc,varptr(h8),-1,varptr(rect),0
    pos 200,250:sysfont 17
    mes "ですよねー。\n\nと言うわけで変換して描画"

    sdim h8to16,64  ;変換後の変数
    MultiByteToWideChar CP_UTF8, 0, varptr( h8 ), -1, varptr( h8to16 ), 255

    font msgothic,150,16
    rect=ginfo_cxginfo_cyginfo_winxginfo_winy     ;文字の描画領域
    DrawText hdc,varptr(h8to16),-1,varptr(rect),0
    redraw  ;必須
    stop



※追記:
 ここででかすぎ6バイトといっていたが調べてみると
 メモ帳などでUTF-8のテキストと判断するための
 フラグが先頭3バイトを占領していることが判明、
 つまり実質UTF-8でのハートの文字は3バイト


※さらに追記:
 Unicodeの方も先頭2バイトは判別フラグみたいです。
 つまりUnicodeのハートは2バイト


これを実行するとこんな感じ。
uni.png

とまあこんな感じでUTF-8の文字を描画することができました。
しかしここで問題が、
読み込むときはそれで良いですが、
保存する時はどうすれば良いのか・・・!?

変換部分のここ
    MultiByteToWideChar CP_UTF8, 0, varptr( h8 ), -1, varptr( h8to16 ), 255

ここの第1パラメーターのCP_UTF8の部分を
Unicodeに該当する定数にすれば良いのかなと思いきや

MultiByteToWideChar 関数 - MSDN
文字列をワイド文字列(Unicode)にマップします
定数意味
CP_ACPANSI コードページ
CP_MACCPMacintosh コードページ
CP_OEMCPOEM コードページ
CP_SYMBOLシンボルコードページ(42)
CP_THREAD_ACP現在のスレッドの ANSI コードページ
CP_UTF7UTF-7 を使った変換
CP_UTF8UTF-8 を使った変換


あれ、無い。

これはもう他の方法を探すしかないなと思い
とりあえずMultiByteToWideCharでググっていると
MultiByte.png
ん?

「WideCharToMultiByte」?

WideCharToMultiByte 関数 - MSDN
ワイド文字列を新しい文字列にマップします

逆版があるだと!?

#uselib "user32"
#func DrawText "DrawTextW" int,wptr,int,int,int
#uselib "kernel32"
#define CP_UTF8         65001   ; UTF-8
#func MultiByteToWideChar "MultiByteToWideChar" sptr,sptr,sptr,sptr,sptr,sptr
#func WideCharToMultiByte "WideCharToMultiByte" sptr,sptr,sptr,sptr,sptr,sptr,sptr,sptr

//----UTF-8
;最終的にはUnicodeに変換しないといけない
    sdim h8,64      ;確保
    poke h8,0,239
    poke h8,1,187
    poke h8,2,191
    poke h8,3,226
    poke h8,4,153
    poke h8,5,161   ;UTF-8でのハート(でかすぎフイタw 6byte)
    
    pos 50,30:sysfont 17
    mes "UTF-8の文字をUnicodeと同じように描画"
    font msgothic,100,16
    rect=ginfo_cxginfo_cyginfo_winxginfo_winy     ;文字の描画領域
    DrawText hdc,varptr(h8),-1,varptr(rect),0
    pos 50,170:sysfont 17
    mes "ですよねー。\n\nと言うわけで変換して描画"

    sdim h8to16,64  ;変換後の変数
    MultiByteToWideChar CP_UTF8, 0, varptr( h8 ), -1, varptr( h8to16 ), 255

    font msgothic,100,16
    rect=ginfo_cxginfo_cyginfo_winxginfo_winy     ;文字の描画領域
    DrawText hdc,varptr(h8to16),-1,varptr(rect),0

    pos 50,300:sysfont 17
    mes "無事描画成功!じゃあ今度は戻してみよう!"

    sdim h16to8,64  ;変換後の変数
    WideCharToMultiByte CP_UTF8, 0, varptr( h8to16 ), -1, varptr( h16to8 ), 255, 0, 0

    font msgothic,100,16
    rect=ginfo_cxginfo_cyginfo_winxginfo_winy     ;文字の描画領域
    DrawText hdc,varptr(h16to8),-1,varptr(rect),0

    redraw  ;必須



utf8.png

         ,,x-ー:: ":::::
        ,x '"::::::::::::::::::::
      ,、'":::::::::::::,, x-‐ ァ:
    ,,x '"::::::,,、- '"     |:::
    `"i`ー'"        ヾ
      !  、 、,,,,,,,,,;;;;;;;;;彡ミ
     |,,,,ノi `ーヾ;; '"----、
     ヾ::ヽ     -┴'~
      ~|:/ ' ' ' `ー ' "'"
      /_
     l    '' )    i
      ヽ,,、'~`      U
       ゙, __ ,-、_,ノ`
 |/      ゙, `'" ,,y
 |/  彡  ゙、`-'"
   /|/     i
   /        !    ,, -'"
    |     `ー '"|::
    |      /|||ヽ
          /|||||/心
          |ヾ/ /`ー


というわけで無事にUTF-8が扱えそうです^q^


[日記マンガ] [HSP]
HOME
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。