以下は日本語文字列(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ランキング
-
数字を文字列に変換し短縮化する
-
日本語文字列の指定長(byte)切出し
-
何故、日本は未だに数字を3桁...
-
CSVファイルの中で、「 , 」カ...
-
文字コードの%E3%80%とは何です...
-
全角英数字の必要性が理解できない
-
マクロを使ってフォルダー内に...
-
いまスマホからカードの申込み...
-
各項目がダブルクォーテーショ...
-
EXCELからCSVにすると余計なカ...
-
【LaTeX】pBibTeXでのエラーの...
-
住宅にカナを入力する際に丁目...
-
エクセルで数値を全角文字(カ...
-
pythonエラー
-
csvデータのダブルクォーテーシ...
-
Excel VBAでPDFファイルをMicro...
-
正規表現で、特定の文字列を含...
-
メッセージボックスの数字をカ...
-
カンマ区切り
-
char型全角数字から、int型半角...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パイソンエラーについて
-
Malformed UTF-8 character
-
splitの逆の処理
-
文字列と数字を含むセルから数...
-
メールヘッダのMIMEエンコード...
-
Perlで Right関数に近い処理を...
-
数字を文字列に変換し短縮化する
-
リストデータの検索でのエラー...
-
Perl/Tk使用時のUTF-8コード文...
-
特定の文字列をHTMLタグに変換...
-
perlを使用しての特定行抽出に...
-
perlで文字列を短く(圧縮)し...
-
VBA split(文字列, ★) ★←複数...
-
文字列操作:最後の4文字を取...
-
プログラミング HSPの変数につ...
-
特定文字列の抽出
-
Perlでのの抜き出し方法
-
GDBでデバッグするとき文字列の...
-
ASP.NETでエンコードの判定
-
cryptの使用方法
おすすめ情報