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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0904
ゆうやんユニコード版でemesを使うと文字化け5解決


ゆうやん

リンク

2018/9/4(Tue) 22:49:59|NO.85294

Unicode版でemesを使うと文字化けします。

#include "hsp3utf.as" #include "hsp3util.as" text 100 emes "あいうえお"
どうすればいいでしょうか?



この記事に返信する


あらや

リンク

2018/9/5(Wed) 15:57:20|NO.85297

hsp3utilがSJIS用のモジュールなのでUnicodeでは使えません。

中身は標準命令を使った物ですので
自力でUTF8用に書き換えてみてはいかがでしょうか。



ゆうやん

リンク

2018/9/5(Wed) 18:14:44|NO.85298

>あらやさん
ありがとうございます。
一応このスクリプトで、できたのですが、
半角英数が含まれると文字化けしてしまいます。

#include "hsp3utf.as" bun="あいうえお" repeat strlen(bun)/3 pos cnt*15,0 mes strmid(bun,cnt*3,3) wait 10 loop
1バイト文字か3バイト文字かどうか取得するにはどうすればいいでしょうか?



あらや

リンク

2018/9/5(Wed) 18:41:34|NO.85299

最初の文字コードで判別できます。


hsp3utf.asファイルを参考にさせていただくと
125行目あたりの

poke messg,0,a poke messg,1,0 if a>=128 { poke messg,1,peek(mestmp,mescur) poke messg,2,0 mescur++ }

変数aが1文字目で、128(16進数だと0x80)以上ならば2バイト文字として
あつかう形になっています。



これをUTF8に改造させていただくと

// 0〜127(0x00〜0x7F)までは1バイト文字 poke messg,0,a poke messg,1,0 if a>=194 { // 2バイト文字(0xC2以上は2バイト以上) poke messg,1,peek(mestmp,mescur) poke messg,2,0 mescur++ } if a>=224 { // 3バイト文字(0xE0以上は3バイト以上) poke messg,2,peek(mestmp,mescur) poke messg,3,0 mescur++ } if a>=240 { // 4バイト文字(0xF0以上は4バイト以上) poke messg,3,peek(mestmp,mescur) poke messg,4,0 mescur++ } if a>=248 { // 5バイト文字 poke messg,4,peek(mestmp,mescur) poke messg,5,0 mescur++ } if a>=252 { // 6バイト文字 poke messg,5,peek(mestmp,mescur) poke messg,6,0 mescur++ }

このような形になります。
ちなみに5バイト文字や6バイト文字はUTF8の定義上としては準備されていますが
実際に使うことはないかと思います。



あらや

リンク

2018/9/6(Thu) 15:26:17|NO.85300

訂正します

誤:hsp3utf.asファイルを参考にさせていただくと
正:hsp3util.asファイルを参考にさせていただくと

コピペミスでした。

申し訳ありません。



ゆうやん

リンク

2018/9/9(Sun) 22:14:49|NO.85316

>あらやさん
ありがとうございます。

poke messg,0,a poke messg,1,0 if a>=128 { poke messg,1,peek(mestmp,mescur) poke messg,2,0 mescur++ }


// 0〜127(0x00〜0x7F)までは1バイト文字 poke messg,0,a poke messg,1,0 if a>=194 { // 2バイト文字(0xC2以上は2バイト以上) poke messg,1,peek(mestmp,mescur) poke messg,2,0 mescur++ } if a>=224 { // 3バイト文字(0xE0以上は3バイト以上) poke messg,2,peek(mestmp,mescur) poke messg,3,0 mescur++ } if a>=240 { // 4バイト文字(0xF0以上は4バイト以上) poke messg,3,peek(mestmp,mescur) poke messg,4,0 mescur++ } if a>=248 { // 5バイト文字 poke messg,4,peek(mestmp,mescur) poke messg,5,0 mescur++ } if a>=252 { // 6バイト文字 poke messg,5,peek(mestmp,mescur) poke messg,6,0 mescur++ }
に変えてみたところ正しく表示されました。
解決です。



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