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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0411
あいこUnicodeとUTF-8との変換5未解決


あいこ

リンク

2008/4/11(Fri) 03:55:36|NO.15053

どうも、はじめまして、
今HTML内のUTF−8文字列をアプリケーション(UNICODEのAPIを使用したエディットコントロール)
に送信したいが、MultiByteToWideCharでなかなか上手くできないので、誰か教えてくれませんか。

UNICODE->UTF-8は大丈夫だが、UTF-8からUNICODEへ変換すれば2バイトしかなくなる…。



この記事に返信する


As

リンク

2008/4/11(Fri) 06:22:24|NO.15054

Unicodeは1文字につきひとつの\0が付加されます。

簡単にいうと、
”あいうえお”であれば「あ\0い\0う\0え\0お\0\0」これがUnicodeになります。

HSPでは文字列を”\0”がある位置まで読み出すので、「あ」だけになってしまっているんだと
思います。

つまり、正常に変換できてると思いますよ。
ただ、送信するときはmemcpyなどを使ってUnicodeに変換したサイズを指定して送信しなくては
なりません。

そうしないと、”あ” だけが送信されてしまうので。また、Unicode文字列ポインタ(wptr)として
渡すのであればこの限りではありません。



As

リンク

2008/4/11(Fri) 06:38:35|NO.15055

ん?
そもそも、UTF-8はUnicodeのエンコーディング規格ですよ?



As

リンク

2008/4/11(Fri) 06:53:39|NO.15056

以下実験結果

#uselib "kernel32" #func MultiByteToWideChar "MultiByteToWideChar" int,int,sptr,int,sptr,int sdim a sdim b,256 memset b,0x0021,256,0 a="ABCD" MultiByteToWideChar 0, 0, varptr(a), -1, varptr(b), 255 mes "変換前 : "+a mes "変換後 : "+b repeat 255 mes ""+cnt+" : "+strf("%c",wpeek(b,cnt)) loop



naznyark

リンク

2008/4/12(Sat) 02:32:34|NO.15059

As さんが書き込んだ内容に関連した問題のような気はしますが、
いちおう MultiByteToWideChar を使った UTF-8 から UTF-16 の
変換プログラムのサンプルを載せておきます。

#module #defcfunc showbyte var p1 s = "" repeat 20 : s += strf( "%02X,", peek( p1, cnt ) ) : loop return s #global #include "kernel32.as" #define CP_UTF8 65001 sdim s1, 256 sdim s2, 256 // 文字列"abcdあいうえ" を UTF-8 で表現。 poke s1, 0, "abcd" lpoke s1, 4, 0x8281E3 lpoke s1, 7, 0x8481E3 lpoke s1, 10, 0x8681E3 lpoke s1, 13, 0x8881E3 poke s1, 16, 0 // UTF-8 -> UTF-16 MultiByteToWideChar CP_UTF8, 0, varptr( s1 ), -1, varptr( s2 ), 255 mes "変換前 (UTF8) : " + showbyte( s1 ) mes "変換後 (UTF16) : " + showbyte( s2 ) // UTF-16 文字列を SJIS 文字列に変換して表示。 mes "変換後 (文字列): " + cnvwtos( s2 )


> そもそも、UTF-8はUnicodeのエンコーディング規格ですよ?

Windows 関連では Unicode という単語は UTF-16LE (だけ)を意味するものとして
扱われている場合がありますから・・・。



As

リンク

2008/4/12(Sat) 20:53:46|NO.15062

>Windows 関連では Unicode という単語は UTF-16LE (だけ)を意味するものとして
>扱われている場合がありますから・・・。

なるほど、、そういえばそうですよね。Unicodeの方式もいろいろあるわけで、
その方式間の変換だってありえるわけですね。



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