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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0804
まふ文字コードから文字列への変換について9解決


まふ

リンク

2014/8/4(Mon) 17:59:10|NO.63400

初めまして、HSPでの文字コード変換について質問させて頂きます。

UTF-8の文字コード(3バイトのデータ)を対応する文字列に変換するというソフトを
作りたいのですが、これはHSP上では可能でしょうか。
例えば「あ」のコード「227 129 130」を変換して「あ」という文字列にするといった感じです。

その逆は、peekを使って出来るのですが…。

一応検索等しましたが、もし過去ログ等に前例があったら申し訳ないです。



この記事に返信する


skyblue

リンク

2014/8/4(Mon) 19:07:15|NO.63413

標準ではユニコードを表示する命令や関数が存在していなかったはずなので
SJISに変換すれば表示くらいなら可能(変換可能文字のみ)



まふ

リンク

2014/8/4(Mon) 19:35:09|NO.63418

skyblue様
ご回答ありがとうございます。

"SJISに変換すれば表示くらいなら可能"とありますが、これは私が前述した「あ」の例で例えるなら
コード「227 129 130」を何らかの方法でSJISの文字列に変換して表示する、ということでしょうか。

語彙不足のためわかりにくい質問になってしまって申し訳ないです。



moge

リンク

2014/8/4(Mon) 21:33:33|NO.63424

こんな感じですか。

#include "encode.as" s="" poke s,0,227 poke s,1,129 poke s,2,130 poke s,3,0 mes utf8n2sjis(s)



まふ

リンク

2014/8/4(Mon) 22:16:28|NO.63426

moge様
ご回答ありがとうございます。

おお、正にこれがやりたかったのです!
pokeでバッファに入れた後、nkfcnv辺りで上手く認識してくれないかな・・・などと考えていました。
encode.asなるものがあるとは知らずに・・・私の検索不足でした。

あと、1つだけお聞きしたいのですが、4バイト目に"0"を書き込んでいるのには何か理由があるのでしょうか。
もしそれが推奨されているのであれば、倣って使おうと思います。



skyblue

リンク

2014/8/5(Tue) 10:53:14|NO.63432

「文字列 終端」であたりで検索してみてください。
結論を言うと仕様です。(ハードウェア的な)



moge

リンク

2014/8/5(Tue) 21:35:07|NO.63459

少なくとも今のPCではハードウエアの仕様ではないです。
プログラミング上の仕様です。

サンプルで使ってるutf8n2sjisは文字ではなくて文字列を変換する関数です。
文字なら一文字だけ読み込んだら終わりとわかりますが文字列だと終わりがどこかわかる必要があります。
それで文字列には終わりを表す見えない文字が文字列の最後についててヌル文字とか呼ばれてます。
その文字コードが0になります。
それがなかったら関数もどこまで文字を読み続けたらいいのかわからないでしょ。



skyblue

リンク

2014/8/6(Wed) 16:55:52|NO.63486

>字列だと終わりがどこかわかる必要があります。
>それで文字列には終わりを表す見えない文字が文字列の最後についててヌル文字とか呼ばれてます。
>その文字コードが0になります。
>それがなかったら関数もどこまで文字を読み続けたらいいのかわからないでしょ。
それらも込みで言っています。
しかも、あくまでハードウェア的なです。
ハードウェアとは明言はしていないつもりです。



moge

リンク

2014/8/6(Wed) 22:13:10|NO.63504

後半はまふさんへの返答だったんですが。

>しかも、あくまでハードウェア的なです。
>ハードウェアとは明言はしていないつもりです。
えっと意味が分かりません。
何が言いたいんでしょう。



まふ

リンク

2014/8/7(Thu) 23:51:47|NO.63554

skyblue様 moge様
ありがとうございます。

なるほど、関数によってはこうした留意点もあるのですね…。
その時やりたい機能だけを寄せ集めた独学故に、決まり事やお約束などに疎いのは
何とかしないといけないな…。
文字列を扱う関数に触れる時は意識してみますね。

とても丁寧なご回答、本当にありがとうございました!



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