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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- その他(プログラミング・Web制作) プログラミング python pandas 固定長データの出力 2 2022/08/16 11:22
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- UNIX・Linux Postfixでドコモメールに送信すると届くまで10分ぐらいかかる 6 2023/03/05 13:56
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perl でエラー:Wide character...
-
jcode.plのかわり
-
MFCのコントロールにUTF-8の文...
-
CGIでメール送信で件名文字化け
-
【LaTeX】pBibTeXでのエラーの...
-
JcodeモジュールとEncodeモジュ...
-
Perlバージョン違いと use enco...
-
perlについての質問
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
エクセルで数値を全角文字(カ...
-
IEからEdgeへの移行に伴うIMEの...
-
EXCELからCSVにすると余計なカ...
-
CString から LPCTSTRの型に変換
-
VBで、String型のデータが、...
-
マクロを使ってフォルダー内に...
-
VB.net、テキストボックス入力...
-
エクセルにMicrosoft Barcode C...
-
[VBA][Excel]クリップボードか...
-
カンマ区切りの数字をCSVフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl でエラー:Wide character...
-
jcode.plのかわり
-
MFCのコントロールにUTF-8の文...
-
【LaTeX】pBibTeXでのエラーの...
-
Perlで、文字の出現回数を調べ...
-
Cannot decode string with wid...
-
PerlでRSS取得 ~ 文字化け ~ ...
-
PHPの文字化けについて
-
HTML::Templateでutf-8のテンプ...
-
printfの書式指定での2バイト文...
-
sedやperlでの2バイト文字を含...
-
pythonの文字コードとファイル操作
-
デバッグ情報が文字化けする
-
JAVAでMySQLに接続すると日本語...
-
Java+MySQLで特殊文字(丸数字(...
-
オブジェクト? perlをオーバー...
-
WWW::Mechanizeの文字コードに...
-
UTF-16からUTF-8への変換
-
機種依存文字(株)を入力すると\...
-
XMLパラメータの取り込みに関して
おすすめ情報