
以下は日本語文字列(EUC)の指定長(byte)切出し関数なのですが、
これをShift-JIS版にするにはどうすれば良いのでしょうか?
================================================================
sub jcut {
# 日本語文字列(EUC)の指定長(byte)切出し
local($string, $length) = @_;
if (substr($string,$length-1,1) =~ /[\x80-\xff]/) { $length++; }
return substr($string, 0, $length);
}
================================================================
宜しくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>substrはバイトでカットするため、半角、全角混じり文字列の全角の真中を切ってしまうことが有ります。
というか。。。微妙な問題なのに
Perlのバージョンとか種類を書かないのはなぜ??
Perl5.6とPerl5.8でも違うだろうし,
Perl4とかJperl4とか
Perl5.00*と対応するJperlとか.
ついでにいうと,localを使うのも意味不明だなあ.
推察するに相当古い環境ですか?
少なくとも,Perl5.8.8 on Winでは
use encoding "sjis";
print substr("aあいう",1, 2);
で「あい」って出てきますよ.

No.1
- 回答日時:
require 'jcode.pl';
sub jcut {
# 日本語文字列(EUC)の指定長(byte)切出し
local($string, $length) = @_;
if (substr($string,$length-1,1) =~ /[\x80-\xff]/) { $length++; }
&jcode::convert(\$string, 'sjis');
return substr($string, 0, $length);
}
あるいは
use Jcode;
sub jcut {
# 日本語文字列(EUC)の指定長(byte)切出し
local($string, $length) = @_;
if (substr($string,$length-1,1) =~ /[\x80-\xff]/) { $length++; }
&Jcode::convert(\$string, 'sjis');
return substr($string, 0, $length);
}
これでいいと思います。
この回答への補足
substrはバイトでカットするため、半角、全角混じり文字列の全角の真中を切ってしまうことが有ります。
そのため、最後尾の文字が文字化け表示されます。
これを避けるためには、カット位置が半角か全角か調べて、全角の真中であればカット位置を調整してやる必要があります。
そういう関数なのですが、Shift-JISの場合は適用できません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Perl perlについての質問 2 2022/10/17 15:25
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 指定文字を太字にするVBAを別シートのセルを指定する構文(改良について) 6 2022/08/27 22:11
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
splitの逆の処理
-
VBA like演算子について
-
Perlで Right関数に近い処理を...
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
住宅にカナを入力する際に丁目...
-
Excelについて質問です。 セル...
-
マクロを使ってフォルダー内に...
-
カンマ区切りの数字をCSVフ...
-
全角英数字の必要性が理解できない
-
各項目がダブルクォーテーショ...
-
文字コードの%E3%80%とは何です...
-
英数字のみ全角から半角に変換
-
EXCELからCSVにすると余計なカ...
-
C#で空白行を削除する方法
-
word差し込み印刷 半角カタカ...
-
InputMan の imTextについて
-
csvデータのダブルクォーテーシ...
-
VBA 文字に半角が含まれて...
-
[VBA][Excel]クリップボードか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Malformed UTF-8 character
-
文字列と数字を含むセルから数...
-
Perlで Right関数に近い処理を...
-
パイソンエラーについて
-
ワイルドカード処理
-
何度も出現する文字列AAのうち...
-
GDBでデバッグするとき文字列の...
-
splitの逆の処理
-
数字を文字列に変換し短縮化する
-
リストデータの検索でのエラー...
-
メールヘッダのMIMEエンコード...
-
プログラミング HSPの変数につ...
-
Perlでのの抜き出し方法
-
perlで文字列を短く(圧縮)し...
-
正規表現での文字の抜き出し
-
perlでの判定がうまくいきません
-
VBA like演算子について
-
リフェラーで弾く方法について
-
文字列検索(例えばindex関数)...
-
Perl(Windows)の文法について
おすすめ情報