
No.2ベストアンサー
- 回答日時:
ちょっと裏技的に
use Encode ;
binmode(STDOUT,":bytes") ; # バイトコードをそのまま出力させるように変更
printf "|%2s\n|",Encode::encode('cp932',"あ"); # cp932にencodeすれば、2バイト文字は「2バイト=2文字」扱いになる
既出の方法の方が汎用性はありますけど。
No.1
- 回答日時:
# 表示がくずれるので空白2文字を全角空白にしていることに注意
use strict;
use warnings;
use utf8;
use Encode;
use Encode::CJKConstants;
my @hello_list = (
'こんにちは、世界!!', 'Hello World!!',
'HELLO WORLD!!', 'こんにちは、World。',
"コンニチハ 世界.", '世界,你好!'
);
binmode STDOUT, ":encoding(utf8)";
for my $hello (@hello_list) {
my $view_length = count_view_length($hello);
my $char_length = length $hello;
my $format = '%-' . ( 32 - ( $view_length - $char_length ) ) . 's :';
printf $format, $hello;
print "\n";
}
# result。等幅フォントで見れば : (コロン)が揃っている
# こんにちは、世界!! :
# Hello World!! :
# HELLO WORLD!! :
# こんにちは、World。 :
# コンニチハ 世界. :
# 世界,你好! :
sub count_view_length {
my $str = shift;
my $view_length = 0;
for my $char ( split q{}, $str ) {
my $sjis_char = encode( 'sjis', $char );
if ( $char =~ m/\p{InBasicLatin}/ ) {
$view_length += 1;
}
elsif ( $sjis_char =~ m/^$Encode::CJKConstants::RE{SJIS_KANA}$/ ) {
$view_length += 1;
}
else {
$view_length += 2;
}
}
return $view_length;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perl でエラー:Wide character...
-
【文字コード】外見上は全く同...
-
perlで読み込むテキストの文字...
-
CGIでメール送信で件名文字化け
-
{ブロック}の外でのみ use ut...
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
住宅にカナを入力する際に丁目...
-
VBA 文字に半角が含まれて...
-
Excelについて質問です。 セル...
-
IEからEdgeへの移行に伴うIMEの...
-
英数字のみ全角から半角に変換
-
word差し込み印刷 半角カタカ...
-
カンマ区切りの数字をCSVフ...
-
全角入力
-
コンボボックスに貼り付け文字...
-
プログラミングでは、半角括弧...
-
VBA 置換文字がみつからない時
-
ひとつの命令を複数行に記述
-
各項目がダブルクォーテーショ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl でエラー:Wide character...
-
【文字コード】外見上は全く同...
-
MFCのコントロールにUTF-8の文...
-
UTF-16からUTF-8への変換
-
perlについての質問
-
substrでutf8の日本語文字を先...
-
文字コードについて \\x{53d6}...
-
キーワード抽出がうまくいかない
-
【LaTeX】pBibTeXでのエラーの...
-
CGI.pmで日本語をURLエンコード...
-
デバッグ情報が文字化けする
-
ソース中の文字列と、DBから取...
-
perl 5.6 とperl 5.8 の内部形...
-
JcodeモジュールとEncodeモジュ...
-
Perlで、文字の出現回数を調べ...
-
Jcode.pmでconvertできない
-
EC-CUBEでの文字化け
-
UTF-8のPerlから、UTF-8、EUC、...
-
MT::Mailでメールを送信すると...
-
{ブロック}の外でのみ use ut...
おすすめ情報