トップ回答者
SUAのecho文で日本語が文字化けする

質問
-
SUAのkshで日本語をechoすると文字化けする場合があります。
たとえば echo "日本語のメッセージチェック処理" > aaa.txt
した時の結果が「日本語のメッセージチェッN処理」
-xで調べたところecho "日本語のメッセージチェッN処理"の段階で1文字だけがこわれます。
出力結果をバイナリーで調べたとところ日本語2バイトの内先頭1バイトが欠落していることがわかりました。
前後にダミーの命令を入れたり、メッセージを変えると出なくなりますが、環境が変わると別の場所で発生します。
環境 Vmware上のWindows2008 SP1
shell内でwindowsアプリケージョンを呼び出しています。
さらに調査した結果 シェルを768バイト単位に区切り、その境目に日本語が来た場合に、日本語の前1バイトがkshに読み込まれていない
事がわかりました。
対応方法がありますでしょうか。
2011年1月17日 10:20
回答
-
回答が遅くなって申し訳ありません。
拝見させていただきましたが 基本 rshに対する解決策なので今回の現象には関係ないと思います。
コード系の差異による文字化けではありません。
windows上で直接shコマンドを実行した場合の問題です。
以下のようなシェルを作成し実行したところ、確実に768バイト目で文字化けを起こしていました。
echo "ああああああああああああああああああ....(4000バイト) あ" > test.txt
日本語が奇数バイト目になるようにする。
ここで出力されたtest.txtを調べたところ、768バイト目の1バイトが欠落していることがわかりました。
たとえば x"82a0" => x"a0"になっていました。
現在は該当箇所が768バイト目に来ない様に前後の空白を調整して回避しています。
- 回答としてマーク 服部清次 2011年1月31日 8:39
2011年1月31日 5:47
すべての返信
-
こんにちは、フォーラムオペレーターの三沢健二です。
念のために、下記リンク先に記載されている内容を確認いただければと思います。
- 参考情報
Subsystem for UNIX-based Application (SUA) を利用した、rsh サーバーの設定について
http://technet.microsoft.com/ja-jp/windowsserver/ff576026--- 抜粋 ---
4.リモート コマンドの引数として日本語の文字列を指定すると、文字化けが発生するリモート コマンドの引数として日本語の文字列が含まれる場合、rshd から起動される Korn Shell に環境変数 LANG が設定されていないと、Korn Shell は引数を ASCII 文字列として取り扱うため文字化けが発生するため正しく引数を解釈できずにコマンドが実行できない場合があります。
この現象は、リモート シェル サーバー上でログイン シェルとして /bin/ksh が起動される前に環境変数 LANG に適切な値を設定することで回避することができます。
------------
それでは、こちらの情報が少しでもお役にたてれば幸いです。______________________________________
マイクロソフト株式会社 フォーラム オペレーター 三沢健二2011年1月20日 2:47 -
隣のたま さん、
こんにちは。
フォーラム オペレーターの服部清次です。隣のたま さんがこちらの質問を投稿されてから少し経ちましたが、
弊社の三沢健二が紹介しましたリンク情報はご確認いただけましたでしょうか?隣のたま さんの現在の状況が気になるところなのですが、、、
今回、1つの参考情報として弊社の三沢の回答を役立てていただけるのではないかと思いましたので、
勝手ながら、私の方でひとまず [回答としてマーク] させていただきました。また何か疑問や質問がありましたら、ぜひ TechNet フォーラムをご利用ください。
今後とも、よろしくお願いします。
それでは、また。
__________________________________________________
マイクロソフト株式会社 フォーラム オペレーター 服部 清次2011年1月27日 6:19 -
回答が遅くなって申し訳ありません。
拝見させていただきましたが 基本 rshに対する解決策なので今回の現象には関係ないと思います。
コード系の差異による文字化けではありません。
windows上で直接shコマンドを実行した場合の問題です。
以下のようなシェルを作成し実行したところ、確実に768バイト目で文字化けを起こしていました。
echo "ああああああああああああああああああ....(4000バイト) あ" > test.txt
日本語が奇数バイト目になるようにする。
ここで出力されたtest.txtを調べたところ、768バイト目の1バイトが欠落していることがわかりました。
たとえば x"82a0" => x"a0"になっていました。
現在は該当箇所が768バイト目に来ない様に前後の空白を調整して回避しています。
- 回答としてマーク 服部清次 2011年1月31日 8:39
2011年1月31日 5:47 -
隣のたま さん、
こんにちは。
フォーラム オペレーターの服部清次です。
ご自身で回避策を見つけられたとのことで、ご報告ありがとうございます。
残念ながら、私が [回答としてマーク] させていただきました弊社の三沢の回答は、
今回の 隣のたま さんのケースでは該当しなかったとのことですので、
いったん [回答としてマーク] を解除させていただきました。また、回避策を紹介してくださった 隣のたま さんの返信は、質問者ご自身の投稿ではありますが、
似たような現象に遭遇された他の方々にとっては貴重な情報になるのではないかと思いましたので、
[回答としてマーク] させていただきました。今後とも、TechNet フォーラムをよろしくお願いします。
それでは、また。
__________________________________________________
マイクロソフト株式会社 フォーラム オペレーター 服部 清次2011年1月31日 8:41