HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0731
Yuuki文字化けしてしまう6未解決


Yuuki

リンク

2017/7/31(Mon) 20:00:59|NO.80791

Unicode版のHSPで文字化けしてしまいます。
どうすればいいでしょうか?

#include "hsp3utf.as" #include "user32.as" sdim test title "한글" GetWindowTextW hwnd,varptr(test),259 dialog test



この記事に返信する


tds12

リンク

2017/7/31(Mon) 20:50:03|NO.80797

スクリプトエディタはUnicodeに対応していないからです。

https://www.dropbox.com/s/bq18otmech5j4mf/hsp3utf_20170423b.zip?dl=0
試験的にUnicodeに対応させたスクリプトエディタが上記アドレスにあるので
ダウンロードして試してください。



tds12

リンク

2017/7/31(Mon) 22:14:26|NO.80798

>ダウンロードして試してください。
書き忘れましたが
スクリプトエディタ以外は上書きしないでください。
ランタイム等はHSP3.5β5の方が改善されています。



Yuuki

リンク

2017/8/1(Tue) 00:13:10|NO.80799

>スクリプトエディタはUnicodeに対応していないからです。
Unicode対応版のHSPスクリプトエディタ使っています。
変数のデータポインタが文字化けしてしまうのですが...
https://www.fastpic.jp/images.php?file=6993860730.png



tds12

リンク

2017/8/1(Tue) 01:05:45|NO.80800

そのダイアログはdialogではなく
#func MessageBoxA "MessageBoxA" sptr,sptr,sptr,sptr
というようなもの(#include "user32.as"など)ですか?
データポインタということはvarptrでint指定でしょうか?

varptrでは文字列のエンコード変換などは行いません。
変数内ではutf8として文字列を格納しています。
#funcでwstrまたはwptrとした関数のパラメータに
文字列型で指定すればUTF16(WindowsでいわゆるUnicode)に変換してから
関数へ渡します。
Windowsで一般的にUnicodeといわれるのはUTF16ですので
変数内で使われているutf8を指定すると文字化け状態になります。

UTF16に変換された文字列のポインタがほしいときは
いったんcnvstowで別の変数にUTF16変換した文字列を格納し
その変数のvarptrをとってください。



Yuuki

リンク

2017/8/2(Wed) 18:57:39|NO.80806


#include "hsp3utf.as" #uselib "user32.dll" #func MessageBox "MessageBoxW" int,wstr,wstr,int #func GetWindowText "GetWindowTextW" int,var,int sdim test,259 title "한글" GetWindowText hwnd,test,259 MessageBox hwnd,"タイトルバー "+test,"",64
これでも文字化けしてしまいます。



tds12

リンク

2017/8/2(Wed) 19:57:17|NO.80808

GetWindowTextWは第二引数にUTF16エンコードされた文字列を返します。
そしてhsp3utfはDLL関数から返される文字列をUTF8に変換しません。
これはUTF16文字列であるか他の文字コードかあるいは文字列ではないか
ランタイムとして判断することができないためであり意図した動作です。

この場合はconvwtosを使ってUTF8な通常文字列に変換してから
"タイトルバー"に+する必要があります。



ONION software Copyright 1997-2023(c) All rights reserved.