- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:75オクテットごとに改行を入れる方法)
75オクテットごとに改行を入れる方法とは?
このQ&Aのポイント
- 質問者は、iCalendarのデータを吐き出すプログラムを作成している。長い項目に関して、75オクテットごとに改行(CRLF)と半角スペースを挿入する方法がわからないという問題がある。文字コードはUTF-8で、全角・半角文字が混在している。また、データ中に を含む場合は、それが途中で切断されないようにする方法も知りたい。
- iCalendarのデータを吐き出すプログラムを作成中の質問者は、長い項目についての処理に困っている。具体的には、75オクテットごとに改行と半角スペースを挿入する方法がわからず、UTF-8での文字コードや全角・半角文字の扱いにも苦労している。また、データ中に含まれる改行文字( )が途中で切れないような処理方法も知りたい。
- iCalendarデータの出力プログラムを作成している質問者は、長い項目の処理について困っている。具体的には、75オクテットごとに改行と半角スペースを挿入する方法がわからないという問題があり、UTF-8の文字コードも扱っているため、全角・半角文字の区別も難しい。さらに、改行文字( )が途中で切れないような処理方法も知りたい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
1オクテット = 1バイトと考えます。 UTF-8では日本語の全角半角1文字は3から4バイトですが、OK? > なお、データ中に\nを含む場合は、それがぶった切られないようにする方法はないでしょうか? ??よくわからず。 適当。以下、表示がくずれるので空白2文字を全角空白1文字で書いていることに注意。 use strict; use warnings; # for testing my $wrap = 5; my $string1 = 'A' x 10; my $string2 = 'B' x 13; for my $string ( $string1, $string2 ) { print qq(\x0A\x0D"$string"\x0A\x0D); print "---\x0A\x0D"; while ( $string =~ m/([\x00-\xFF]{$wrap,$wrap})/g ) { print $1, "\x0A\x0D "; } my $rest = length($string) % $wrap; if ( $rest > 0 ) { print substr( $string, -$rest ), "\x0A\x0D "; } print "---\x0A\x0D"; }
補足
説明不足でした。 my $a = "あいうえおかきくけこさしすせそたちつてのなにぬね\\nのはひふへほ"; というデータに対して、printした際に、出力結果として ……なにぬね\ nの… ではなく、 ……なにぬね \nの…… と\nが分断されないように出力したいという意味でした。 ただ、解決策が見えてきたような気がします。ありがとうございました。