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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0515
grassheart\uから始まるUnicodeの文字列を変換したい3未解決


grassheart

リンク

2018/5/15(Tue) 20:23:35|NO.84411

題名の通りです。hspinetを用いてAPIに投げたリクエストから帰ってくるjsonの内容が\u〜から始まる文字列で戻ってきます。
デコードするにはどのような方法があるのでしょうか?調べても思うようなものが見当たらなかったので質問させていただきました。



この記事に返信する


あらや

リンク

2018/5/15(Tue) 20:55:10|NO.84413

HSPの標準関数cnvwtosを使うとSJISに変換できます。



Velgail

リンク

2018/5/16(Wed) 23:03:58|NO.84432

理屈の上では、こんな感じ。
https://ja.wikipedia.org/wiki/UTF-8#%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88
参考文献は上の。ビットフィールドを意識して、ちゃんと考えれば理解できるが……(説明する気力はなかったりする)


#include "hsp3utf.as" jsdata="\\u30DB\\u30C3\\u30C8\\u30B9\\u30FC\\u30D7" current_pos=0 decode_pos=0 sdim decode,1024//容量は予め確保のこと。適切にね。 repeat //とりあえず\uから始まる部分を探す。あくまで簡易的に。 next_pos=instr(jsdata,current_pos,"\\u") if(next_pos<0):break current_pos+=next_pos+2 hex=strmid(jsdata,current_pos,4) dec=int("$"+hex)//int型に変換して、UTF-8化の処理に入る。 if(dec<128){ poke decode,decode_pos,dec decode_pos++ }else:if(dec<1<<11){ poke decode,decode_pos,$c0|((dec>>6)&0x1f) mes strf("%x",$c0|((dec>>6)&0x1f)) poke decode,decode_pos+1,$80|(dec&0x3f) mes strf("%x",$80|(dec&0x3f)) decode_pos+=2 }else{ poke decode,decode_pos,$e0|((dec>>12)&0x0f) mes strf("%x",$e0|((dec>>12)&0x0f)) poke decode,decode_pos+1,$80|((dec>>6)&0x3f) mes strf("%x",$80|((dec>>6)&0x3f)) poke decode,decode_pos+2,$80|(dec&0x3f) mes strf("%x",$80|(dec&0x3f)) decode_pos+=3 } loop mes decode //実際にバイト列が一致しているか、見比べてみよう。 decode="ホットスープ" pos 100,0 repeat strlen(decode) mes strf("%x",peek(decode,cnt)) loop mes decode



科学太郎

リンク

2018/5/19(Sat) 04:51:59|NO.84443

過去に同じような質問がありました。
ここに回答を出してますので参考に。

・HSP3Dish 「NDKのビルドに失敗しました」
http://hsp.tv/play/pforum.php?mode=pastwch&num=81343

・[HSP]UTF-16デコードについて
https://blog.goo.ne.jp/masaki_goo_2006/e/b6532304d803849ad23ba617ecb5bc52

どうぞ。



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