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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0728
axobj文字列の変換8解決


axobj

リンク

2006/7/28(Fri) 15:08:55|NO.1607

「こんにちは」という文字列を、googleで検索すると、アドレスに

%e3%81%93%e3%82%93%e3%81%ab%e3%81%a1%e3%81%af&num=50

という文字列があります。
「こんにちは」という文字列を、このコードに変更するにはどうすればいいですか?
同じように、gooやYahoo!でもしたいのですが、できますか?



この記事に返信する


D

リンク

2006/7/28(Fri) 21:39:19|NO.1612

単純に変換するならこちらのコード表とか参照すれば良いかな、と
http://jprs.jp/doc/rule/saisoku-1-wideusejp-furoku-4.html


Unicode = int ($3053);[こ]の場合 Code_A = "%" + strf ("%x",(Unicode & 63) | 128);下位6ビット変換 Code_B = "%" + strf ("%x",(((Unicode & 4032) >> 6) | 128));中位6ビット変換 Code_C = "%" + strf ("%x",(((Unicode & 61440) >> 12) | 224));上位4ビット変換 UTF = Code_C + Code_B + Code_A mes UTF



axobj

リンク

2006/8/1(Tue) 18:41:09|NO.1695

複数の文字列を変換するにはどうすればいいですか?



Irisawa

リンク

2006/8/1(Tue) 23:33:43|NO.1713

完全な動作は保証しませんがSJIS->UTF-8に変換した上でUTF-8文字列をURLエンコードする
なら、IMultiLanguage::ConvertStringを使用するといいみたいです。

http://quasiquote.org/hspwiki/%ca%b8%bb%fa%a5%b3%a1%bc%a5%c9%ca%d1%b4%b9
http://msdn.microsoft.com/library/default.asp?url=/workshop/misc/mlang/reference/ifaces/imultilanguage/convertstring.asp
http://www.wac-jp.com/programmers/win32/MLangHelper_ConvertString.html

http://hspwiki.nm.land.to/?%BE%AE%A5%EF%A5%B6%2F%A5%DD%A5%A4%A5%F3%A5%BF%A4%F2%BB%C8%A4%C3%A4%C6%A4%CE%A4%A2%A4%EC%A4%B3%A4%EC

のmod_pval.hspモジュールを使用しています。
DLしてご利用下さい。


#include "mod_pval.hsp" #module "encodemod" #const global CODEPAGE_S_JIS 932 ; Shift-JIS #const global CODEPAGE_EUC_JP 51932 ; EUC-JP #const global CODEPAGE_JIS 50220 ; iso-2022-jp #const global CODEPAGE_UTF_8 65001 ; utf-8 #usecom IMultiLanguage@encodemod "{275c23e1-3747-11d0-9fea-00aa003f8646}" \ "{275c23e2-3747-11d0-9fea-00aa003f8646}" #comfunc MuLang_ConvertString 9 var, int, int, var, var, var, var #deffunc encode_init newcom pMLang, IMultiLanguage return #defcfunc encode var v1, int p1, var v2, int p2, local sSize, local dSize, local pdwMode pdwMode = 0 sSize = bufsize(v1) dSize = 0 sdim v2 MuLang_ConvertString pMLang, pdwMode, p1, p2, v1, sSize, v2, dSize sdim v2, dSize MuLang_ConvertString pMLang, pdwMode, p1, p2, v1, sSize, v2, dSize return dSize #deffunc encode_term delcom pMLang pMLang=0 return #global #define ctype range(%1, %2, %3) (%1 > %2 & %1 < %3) onexit *exit encode_init pStr = "こんにちは" len = encode(pStr, CODEPAGE_S_JIS, dStr, CODEPAGE_UTF_8) sdim encbuf repeat len tmp = peek(dStr, cnt) if tmp = 0 & peek(dStr, cnt + 1) = 0 { break } if range(tmp, 0x29, 0x3a) | range(tmp, 0x40, 0x5b) | range(tmp, 0x60, 0x7b) { encbuf += strf("%c", tmp) } else { encbuf += strf("%%%02x", tmp) } loop mes encbuf stop *exit encode_term end



Irisawa

リンク

2006/8/1(Tue) 23:37:36|NO.1714

バグなどありましたら、申し訳ありません。
もう少し、効率のいい書き方ができるといいのですが...。

因みに、上記の説明で少し間違えていました。

> http://quasiquote.org/hspwiki/%ca%b8%bb%fa%a5%b3%a1%bc%a5%c9%ca%d1%b4%b9
> http://msdn.microsoft.com/library/default.asp?url=/workshop/misc/mlang/reference/ifaces/imultilanguage/convertstring.asp
> http://www.wac-jp.com/programmers/win32/MLangHelper_ConvertString.html

を参考にして

> http://hspwiki.nm.land.to/?%BE%AE%A5%EF%A5%B6%2F%A5%DD%A5%A4%A5%F3%A5%BF%A4%F2%BB%C8%A4%C3%A4%C6%A4%CE%A4%A2%A4%EC%A4%B3%A4%EC

のモジュールを使用したという意味です。



Irisawa

リンク

2006/8/2(Wed) 02:42:29|NO.1719

少し、修正。

> sSize = bufsize(v1)

ここは、

sSize = -1

とした方がいいようです。

> if tmp = 0 & peek(dStr, cnt + 1) = 0 {
> break
> }

上記の修正をすればここは要らないようです。
(むしろ、バッファがあふれる可能性があるので上記と共に修正した方がいいです)

なお、この修正でmod_pval.hspモジュールが要らなくなりました。(^_^;
よく分からずに書いていたのですが、調べてみるともう少し簡単でした。(^^ゞ
あと、コード自体には関係ないのですが

> pMLang=0

は、スペースを入れ忘れていたようです。
(「pMLang = 0」、別にどっちでもまったく関係ないですが)



Irisawa

リンク

2006/8/2(Wed) 03:03:34|NO.1720

修正版も書いておきます。

# ついでに要らないのにいくつかのエンコード(コードページ)を追加してみました。
# 他のエンコードはレジストリのHKEY_CLASSES_ROOT\MIME\Database\Codepage以下を参照
# してください。
# (動作保証はしないですがどうやら動作しているようです)


#module "encodemod" #const global CODEPAGE_S_JIS 932 ; Shift-JIS #const global CODEPAGE_EUC_JP 51932 ; EUC-JP #const global CODEPAGE_JIS 50220 ; iso-2022-jp #const global CODEPAGE_UTF_7 65000 ; utf-7 #const global CODEPAGE_UTF_8 65001 ; utf-8 #const global CODEPAGE_UNICODE 1200 ; Unicode #const global CODEPAGE_UNICODE_BE 1201 ; Unicode(Big-Endian) #const global CODEPAGE_AUTODET_ALL 50001 ; auto detect all #const global CODEPAGE_AUTODET 50932 ; auto detect #usecom IMultiLanguage@encodemod "{275c23e1-3747-11d0-9fea-00aa003f8646}" \ "{275c23e2-3747-11d0-9fea-00aa003f8646}" #comfunc MuLang_ConvertString 9 var, int, int, var, var, var, var #deffunc encode_init newcom pMLang, IMultiLanguage return #defcfunc encode var v1, int p1, var v2, int p2, local sSize, local dSize, local pdwMode pdwMode = 0 sSize = -1 dSize = 0 sdim v2 MuLang_ConvertString pMLang, pdwMode, p1, p2, v1, sSize, v2, dSize sdim v2, dSize MuLang_ConvertString pMLang, pdwMode, p1, p2, v1, sSize, v2, dSize return dSize #deffunc encode_term delcom pMLang pMLang = 0 return #global #define ctype range(%1, %2, %3) (%1 > %2 & %1 < %3) onexit *exit encode_init pStr = "こんにちは" sdim encbuf repeat encode(pStr, CODEPAGE_S_JIS, dStr, CODEPAGE_UTF_8) tmp = peek(dStr, cnt) if range(tmp, 0x29, 0x3a) | range(tmp, 0x40, 0x5b) | range(tmp, 0x60, 0x7b) { encbuf += strf("%c", tmp) } else { encbuf += strf("%%%02x", tmp) } loop mes encbuf stop *exit encode_term end



axobj

リンク

2006/8/2(Wed) 19:17:09|NO.1729

ありがとうございました。



axobj

リンク

2006/8/9(Wed) 19:30:32|NO.1912

チェックし忘れました。
解決。



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