- ベストアンサー
シフトJISの2バイト文字を知る
シフトJISの2バイト文字を0に置き換えたいと思いました。 $sjifstr =~ tr/\x??-\x??/'0'/; という部分の?が分かればこれは成功しますか? これは2バイト文字を知るための勉強として 試していることです。 2バイト文字のことが分かるようになったら、 フォームから入力された文字列が7文字以上だった場合、 6文字目を…にして、日本語1文字を2文字として計算して 必ず6文字以内になるようにしたいと思っています。 abあいc → abあ… あaいう → あい… a亜bcい → a亜b… のようにしたいと思っています。 それで、まず2バイト文字だけを取り出す方法を 教えてもらおうと思いました。
- A__
- お礼率59% (194/328)
- CGI
- 回答数2
- ありがとう数5
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
サンプル作ったげるから、あとは自分で研究してちょうだいな。 プログラム1 ###################################### $strlen=10; $line=<STDIN>; chomp $line; if (length $line>10) { if (substr($line, $strlen-1, 2) =~ /([\x81-\x9f][\x40-\xfc])|([\xe0-\xfc][\x40-\xfc])$/) { $line=substr($line, 0, $strlen-1); } else { $line=substr($line, 0, $strlen); } print $line."…"; } else { print $line; } ###################################### プログラム2 ###################################### while(<>) { $cnt =s/([\x81-\x9f][\x40-\xfc])|([\xe0-\xfc][\x40-\xfc])//g; # shift-jisの文字数 $cnt+=s/.//g; #半角の文字数 print $cnt; } ######################################
その他の回答 (1)
- kazu-kun
- ベストアンサー率31% (72/232)
シフトJISの1バイト目はASCIIと区別がつくので良いですが、2バイト目はASCIIと区別がつかないので、文字列の先頭から1バイトずつ見ていかないと、どこがSJISの2バイト文字かを判定することはできないよーな気がします。 #2バイト組で見ていけばOKかもしれませんが。
お礼
ありがとうございます。 substr($line, $strlen-1, 2) というふうに2文字ずつなんですね。
関連するQ&A
- シフトJIS 2バイト字の範囲
シフトJISの2バイト文字の範囲は 0x40~0x7e と 0x80~0xfc と 0x40~0xfc のどっちですか? どちらの情報も見たことがあるんです。 シフトJISの文字をマッチングさせる場合、 ここでは見やすく、スペースを入れて / [\x81-\x9f] [\x40-\xfc] | [\xe0-\xfc] [\x40-\xfc] / とした場合、例えば、亜a という文字列があったら 亜 の2バイト目(下位ニブルっていうのかな)が 9F で b は16進で 62 だから、亜 の2バイト目と a が、 2バイトのシフトJISとしてこれにマッチしてしまうんです。 シフトJISで、こういう例外処理を書かずに、 全てに適用できるシフトJIS2バイトマッチのソースが あれば教えてください。
- ベストアンサー
- CGI
- シフトJIS の1バイト目
シフトJISの1バイト目は 0x81~0x9F と 0xE0~0xEF というサイトもある。 0x81~0x9F と 0xE0~0xFC というサイトもある。 最近、文字コードに追加か削除された文字があるから 意見が2つに分かれていると思うんだけど、 現在はどうなのか教えてください。 シフトJISの2バイト目は 0x40~0x7E と 0x80~0xFC ですか? http://google.yahoo.co.jp/bin/query?p=%a5%b7%a5%d5%a5%c8JIS+9F+E0+81&hc=0&hs=0 を参考にしました。
- 締切済み
- CGI
- シフトJISの2バイト文字
シフトJISの1バイト目は シフトJISの1バイト目は 0x81~0x9F と 0xE0~0xEF と書いてあるサイトもいくつかあるし、 0x81~0x9F と 0xE0~0xFC と書いてあるサイトもいくつかあります。 どうして意見が2つに分かれているんですか? どっちが正しいのか教えてください。 シフトJISの2バイト目は 0x40~0x7E と 0x80~0xFC ですか?
- 締切済み
- その他(プログラミング・開発)
- シフトJISにてデコード 文字化け
EUC-JPを用いてエンコードすると「A4 AD A4 AB A4 A4 A4 AB A4 AC A4 AF BA B0 BD」となった文字列を保存したテキストをシフトJISでデコードした場合に表示される文字列は何ですか?文字化けするらしいのですがわかりません。分かる方教えてください!
- ベストアンサー
- その他(学問・教育)
- 「シフトJIS X 0213」形式の文字コードチェック
Javaにて「シフトJIS X 0213」で定められている下記の文字を判断したいです。 (参照: http://www.eonet.ne.jp/~kotobukispace/ddt/jisx0213/sjis8xxx.html) ・第3水準 ・第4水準 ・予約 ・使用不可 実現方法としては、文字列を「シフトJIS X 0213」にエンコードして、 エンコードした文字のバイトを判断するのが妥当だと思いますが、 Javaにて「シフトJIS X 0213」にエンコードすることは可能でしょうか。 sunの「サポートされているエンコーディング」の一覧を見ても「シフトJIS X 0213」 はサポートされていないように見受けられます。 (参照: http://www.ingrid.org/java/i18n/encoding/) 仮に「シフトJIS X 0213」にエンコード出来ない場合、 他の方法にて実現する方法等ありましたらご教授願います。 【動作環境】 OS:Windows Vista Business JRE:1.5.0_10
- ベストアンサー
- Java
- シフトJISでURLエンコード
IEのJavaScriptのescapeで日本語をURLエンコードすると、UnicodeでURLエンコードしてしまいますが、シフトJISのままURLエンコードする方法はないのでしょうか? 文字列のシフトJISコードを取得する方法でも良いのですが・・・。 まったく、Unicodeなんて役に立たないものを無理矢理標準にしようとしないで欲しいナ!>MS
- ベストアンサー
- JavaScript
- シフトJISでのフォーム処理
シフトJISで書かれたPHPのページから日本語をGETで送り、 同じくシフトJISで書かれたPHPのページで受け取った文字を表示させたいのですが 「%8D%5D%8C%CB%90%EC%8B%E6」のような文字になってしまいます。 シフトJISのまま日本語を渡す方法はありますか? 携帯サイトだからなんとなくシフトJISを使っているのですが、 そもそもUTF8で書いた方が良いのでしょうか?
- ベストアンサー
- PHP
- 文字操作をしたjisコードをシフトjisに変えたい
携帯メールをCGIで受け取って処理するスクリプトを書いているのですが 文字コードの処理について行き詰っています。 $str = " $B$F$9$H (B"; #jisコードで"てすと" として、この文字列をjcode.pmでシフトjisに変換したいのですが $body = Jcode::convert($str, 'sjis'); このようにしても$bodyの中身は" $B$F$9$H (B"のまま変わりません。 MIME::parserでうけとったjisコードの文字列はちゃんと変換されるのでjcode.pmに問題はないと思われますが、 文字列操作をして変数に入れるとMIME::parserで受け取った場合とおなじ内容でもデコードされないとゆう結果になります。 なにか根本的に違うのでしょうか… スペースを省いてみたり $body = Jcode::convert($str, 'sjis','jis'); としてみたりしたのですが まったくダメでした。 ちょっとしたアドバイスだけでもいいのでよろしくお願いします。 あとお金がかかってもよいので、そういった問題を解決できそうなサイトなどがあれば紹介していただければと思います。 よろしくお願いします。m(__)m
- 締切済み
- Perl
- シフトJIS文字列の中から
(string str;) pos=str.find_last_of("「"); で2バイトさがそうとしても文字化けと同じように間違った文字を見つけてしまいます このシフト文字列対策はどうすればいいのでしょうか?
- ベストアンサー
- C・C++・C#
- JISコードをシフトJISコードに変換する方法
紙とえんぴつを使ってJISコードをシフトJISコードに変換する方法を教えてください。 たしか16進数の変換などを使って出来ると聞いたことがあります。 一文字の漢字だけで良いんです。 例えば『高』という漢字のJISコード「3962」をシフトJISコード「8D62」に変換したいというわけです。 2進数や16進数の計算の知識だけはあります。よろしくお願いします。
- 締切済み
- その他([技術者向] コンピューター)
お礼
ありがとうございます。 質問以外の $cnt+=s/.//g; #半角の文字数 っていうのも勉強になりました。 前に教えてもらった =~ ///o の o についてのソースなんでけど、 実際試してみたら全部ヒットしてしまいました。 分かりません。 でも、めったに使うことない o だと思うから 今はあんまり気にしていません。