― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

返信する
ユーザー名:
件名:
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: ON
BBCode を無効にする
フォントサイズ:
フォントカラー
スマイリーを無効にする
URL を自動的にパースしない
ユーザエージェントを表示する
認証コード
KCaptcha by Nikita_Sp
   

トピックのレビュー - 333文字を改行なしで入力すると文字化けする
作成者 メッセージ
  記事の件名:  Re: 333文字を改行なしで入力すると文字化けする  引用付きで返信する
横から失礼します。

Chiz さんが書かれた次の条件
Chiz さんが書きました:
mailnews.wraplength = 0
テキストメール新規作成
エンコーディングはUnicode (Shift-JISでは再現しません)
と、meeyar さんがお示しくださったスクリーンショットを拝見しました。
ここまでのお話から考えると、Thunderbird のバグのような気がしますが、具体的なところまではわかりません。

上記の条件を前提にすると、現状において先頭から 333 文字目でつまずいているように見えます。
ならば、その手前の文字数で明示的に自動改行を指定してみてはいかがでしょう。
試しに、333 文字のひとつ手前、332 文字めで自動改行するよう、mailnews.wraplength を調整するとして、ここの設定値は俗にいう半角換算なので、日本語で 332 なら、mailnews.wraplength = 664 (あるいはそれ以下の数値)として、明らかに問題が起こる文字数の前で自動改行がおこなわれるよう指定することで、当面の回避策あるいは緩和策になるかもしれません。

Thunderbird の初期設定を変更していないのなら、UTF-8 では format=flowed の指定がつき、その前提で処理されます。
具体的には、Thunderbird の [文字エンコーディング] の選択が [Unicode] なら、作成したメッセージの関連ヘッダは次のようになると思います。
---------------------------------------------------------
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
---------------------------------------------------------

本件の問題が、エンコーディング指定が Unicode (UTF-8) のときに発生し、Shift_JISでは再現しないのなら、format=flowed まわりの処理に何かしらの問題が起こっているのかもしれません。
そして、その際の条件(のひとつ?)が、332 文字を超えることにあるとすれば、そこを超えない段階で自動改行させてしまうことで、異常な処理を回避できるかもしれない、という話です。

(補足1)
mailnews.wraplength を 0 や 999 などの大きな値にするのは、自動改行を無効化したいとか、自動改行する文字数をできるだけ多く取りたいからだと思います。

一方、ご存知のように SMTP の仕様上、送信メッセージ1行あたりの文字数(バイト数)には制限があるため、それを超えない文字数ごとに改行コードを挿入する必要があり、Thunderbird を含めてたいていのメールクライアントは自動的にそのような処理をしています。
そして、メール送信(SMTP)の仕様上どうしても避けられない自動改行(改行コードの挿入)と、ユーザーが表現したい段落構成や文字列配置の関係をもっと柔軟に処理すべく、format=flowed のような機能があるのですが、送信側・受信側双方の対応状況によってはうまくかみ合わないことがあります。

プレーンテキスト形式 + UTF-8 を前提に考えるならば、Thunderbird の自動改行の設定は、下手に mailnews.wraplength をいじらずデフォルトのままにしておき、format=flowed の動作に任せたほうが、ユーザーの希望に沿う場面が多いのではないかと思います。
【注意点】
ただし、現状の Thunderbird は delsp=yes オプションには対応していないため、自動改行が除去さた位置に半角スペースが残ります。
欧文の場合、必ず単語単位で処理されるので、このスペースは効果的に働きますが、日本語などでは一つながりの熟語や文字列の途中に不用意な半角スペースが挿入された格好になる箇所が出てきます。

上記をふまえた上で、"改行のない極端に長い文字列のデータ" を厳密なままメールで送りたいのなら、すでにアドバイスがあるように、メール本文ではなく添付ファイルとして扱うのが無難だと思います。

(補足2)
サンプルを例示しておきます。
中島敦「山月記」冒頭 さんが書きました:
隴西の李徴は博學才穎、天寶の末年、若くして名を虎榜に連ね、ついで江南尉に補せられたが、性、狷介、自ら恃む所頗る厚く、賤吏に甘んずるを潔しとしなかつた。いくばくもなく官を退いた後は、故山、虢略に歸臥し、人と交を絶つて、ひたすら詩作に耽つた。下吏となつて長く膝を俗惡な大官の前に屈するよりは、詩家としての名を死後百年に遺さうとしたのである。しかし、文名は容易に揚らず、生活は日を逐うて苦しくなる。李徴は漸く焦躁に驅られて來た。この頃から其の容貌も峭刻となり、肉落ち骨秀で、眼光のみ徒らに烱々として、曾て進士に登第した頃の豐頬の美少年の俤は、何處に求めやうもない。數年の後、貧窮に堪へず、妻子の衣食のために遂に節を屈して、再び東へ赴き、一地方官吏の職を奉ずることになつた。

句読点を含めてちょうど 333 文字あります。最後の句点「。」が 333 文字目です。それ以上の文字数を試したいのなら、上記サンプルに続けて(改行せず)適当な文字列を入力してください。
上記サンプルには ISO-2022-JP では扱えない文字が含まれているので、このフォーラムからサンプル文をコピー&ぺーストしてメッセージを作れば、Thunderbird は自動的に UTF-8 でエンコーディングするはずです。

UTF-8 が前提ならば、自動改行は format=flowed で処理されるはずなので、そのメッセージを送信側の Thunderbird の [下書き] で見るか、format=flowed に対応した受信側で見るのなら、自動改行は除去され、連続しているように表示されると思います。

以上、根本的な解決策ではありませんが、さしあたっての回避策あるいは考え方のヒントになればということで、コメントさせていただきました。役に立たない話だったらすみません。
投稿記事 Posted: 2016年1月20日(水) 20:59
  記事の件名:  Re: 333文字を改行なしで入力すると文字化けする  引用付きで返信する
bugzillaを"mailnews.wraplength"で検索したら、これがヒットしました。

CJK(Chinese, Japanese, Korean): extra space is inserted within text in mail due to wrap produced by mailnews.wraplength and line length limitation of 1000bytes of SMTP
https://bugzilla.mozilla.org/show_bug.cgi?id=653342
投稿記事 Posted: 2016年1月20日(水) 20:57
  記事の件名:  Re: 333文字を改行なしで入力すると文字化けする  引用付きで返信する
質問者であるChizさんからのレスがありませんが、一応補足。
kiki さんが書きました:
 ・テキストエディタで、2 バイト文字を 333 文字改行なしで作成したものをコピーしてから
 本文に貼り付ける

これは駄目でした。
前回の文章を書いた時に、webサイト→Thunderbirdへ直接コピペではなく、
一度テキストエディタにコピー&改行を全て削除→これを全てコピー→Thunderbirdへ貼り付け
としていましたがやはり再現していました。

試した限りでは、mailnews.wraplength=0の時であっても、本文内のどこかに1か所以上改行が入れば文字化けが起きないようですので、mailnews.wraplength=0を維持したいのであれば
どこか切りのよいところで(1か所以上)改行を入れる
とするのが現実解のように思います。

どうしても、1か所たりとも改行を入れるつもりはない、100%文字列ぎっしりでないと困るということであれば、既にkikiさんからご提案ありますように、必要な部分のみを別途テキストファイルとして保存しておき、添付ファイル扱いで送信するのが安パイでしょう。
投稿記事 Posted: 2016年1月19日(火) 21:50
  記事の件名:  Re: 333文字を改行なしで入力すると文字化けする  引用付きで返信する
 
*質問・投稿する前に、製品のヘルプ、このフォーラム内を検索・閲覧して該当項目や
 同類・類似事例がないか、確認してみましょう。
 また、広くインターネット上でも同類・類似事例がないか、調べてみましょう。
*質問した後やアドバイスをもらった後は放置せずに、結果や経緯を必ず書くようにし
 ましょう。

 
 
根本的な解決方法または回避方法ではありませんが、次があります。

・テキストエディタで、2 バイト文字を 333 文字改行なしで作成したものをコピーしてから
 本文に貼り付ける
・テキストエディタで、2 バイト文字を 333 文字改行なしで作成したものをファイルにして、
 zip ファイルなどに圧縮してメッセージに添付する
投稿記事 Posted: 2016年1月19日(火) 15:55
  記事の件名:  Re: 333文字を改行なしで入力すると文字化けする  引用付きで返信する
「文字化けしている」というのが、Thunderbirdの画面上において具体的にどの部分かが不明ですが、「多分これかな」というのを書いておきます。
現象の全てがChizさんとは一致していると限らないことをご承知おきください。

Window8.1+Thunderbird38.5.1環境で新規プロファイルです。
  • アドオン無し
  • mailnews.wraplength=0
検証文は(手前味噌ですが)ブログ記事の前半部分を使っています。よい例を思いつかなかったので…
メール本文として、改行の全くない文章をコピペし、エンコーディングをUnicode(UTF-8にして「下書き」フォルダに保存すると、
  1. メッセージペイン(メール本文)に表示される文字が途中で改行が入る+一部の文字が化けます。
    添付ファイル:
    コメント: UTF-8で保存をすると赤線部分に文字化けがある
    unicode.png
    unicode.png [ 74.94 KiB | 表示数: 8833 回 ]
  2. この状態で「編集」を選んでメール作成画面を開くと全部化けてます。
    添付ファイル:
    コメント: ISO-8859-1で開いたような文字列になる
    unicode2.png
    unicode2.png [ 97.3 KiB | 表示数: 8833 回 ]
改行が入るタイミングと、部分的に文字化けを起こす原因はわかりません。
また、mailnews.wraplength=9999でも再現します。

この場合でも1.の時点で文字化けを起こしていない部分(上記の例だと「Mozilla Maintenance Service」が、まで)のみをコピーして、新しくメール作成画面を開いてペーストすると、その後(改行をはぶいて)メールを保存しても文字化けは起こりません。

お尋ねの回避方法について、あまりスマートなものは思いつきませんが、
  1. 適度に改行を入れる(mailnews.wraplengthの値を変える)
  2. エンコーディングをiso-2022-jpなどにする
  3. メール本文の先頭に引用記号(半角の>)を入れる
    本文の先頭に引用記号を入れた場合のメッセージペインの表示が以下の通りです。
    添付ファイル:
    unicode-quote.png
    unicode-quote.png [ 68.36 KiB | 表示数: 8833 回 ]

    このあとに「編集」でメール作成画面をひらいて引用記号を除く
ぐらいしか思いつきません。

ThunderbirdのBugっぽい気もしますが、雑な検証なので他にも再現条件があるかもしれません。
改善を要望する場合は再現環境と手順を添えてBugzillaへどうぞ。
投稿記事 Posted: 2016年1月18日(月) 23:19
  記事の件名:  333文字を改行なしで入力すると文字化けする  引用付きで返信する
テキストメールの作成時に、2バイト文字を333文字改行なしで入力し、
保存したり送信したりすると文字化けが起こります。

新規にインストールしたTBで検証してみたところ、再現条件は以下の
とおりです。

mailnews.wraplength = 0
テキストメール新規作成
エンコーディングはUnicode (Shift-JISでは再現しません)

Windows 10 64 bit
Thunderbird 38.5.1

解決方法または回避方法をご存じの方がいらっしゃいましたら、ご教示を
お願い致します。
投稿記事 Posted: 2016年1月17日(日) 15:56

All times are UTC + 9 hours


ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean