![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
以下は日本語文字列(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);
で「あい」って出てきますよ.
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_08.png?8acaa2e)
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ランキング
-
パイソンエラーについて
-
ワイルドカード処理
-
Malformed UTF-8 character
-
文字列と数字を含むセルから数...
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
エクセルで数値を全角文字(カ...
-
CString から LPCTSTRの型に変換
-
マクロを使ってフォルダー内に...
-
「何とかで始まり、何とかで終...
-
EXCELからCSVにすると余計なカ...
-
Excel VBAでPDFファイルをMicro...
-
住宅にカナを入力する際に丁目...
-
VBA 置換文字がみつからない時
-
VBA 文字に半角が含まれて...
-
各項目がダブルクォーテーショ...
-
VBA EXCEL あるセルの中の一...
-
LINUX上でシリアル通信(C++)
-
csvデータ ダブルクォーテ...
-
Excelについて質問です。 セル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Malformed UTF-8 character
-
Perlで Right関数に近い処理を...
-
splitの逆の処理
-
パイソンエラーについて
-
日本語文字列の指定長(byte)切出し
-
特定の文字列をHTMLタグに変換...
-
何度も出現する文字列AAのうち...
-
完全一致のデータだけを検索で...
-
VBA split(文字列, ★) ★←複数...
-
ファイルから文字列を読み出し...
-
プログラミング HSPの変数につ...
-
数字を文字列に変換し短縮化する
-
特定文字列の抽出
-
perlで文字列を短く(圧縮)し...
-
正規表現での文字の抜き出し
-
カートの送料設定を2個まで1個...
-
外部ファイルに「漢字(かんじ...
-
Perlの文字列置換について
-
複数の比較( =~ )を効率よく...
-
リストデータの検索でのエラー...
おすすめ情報