C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: FTPにファイルをアップロードすると日本語が文字化けします


(過去ログ 17 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■6625 / inTopicNo.1)  FTPにファイルをアップロードすると日本語が文字化けします
  
□投稿者/ ジョージ (3回)-(2007/08/21(Tue) 00:38:54)

分類:[C#] 

こんばんわ。色々と調べてみたのですがどうにも解決できなかったので
皆様のお知恵を貸してください。

FTP上にテキストファイルをアップロードしてるのですが
テキストファイルの中身に日本語が混じるとそこだけ文字化けしてしまいます。
なんとか文字化けさせずにアップロードをしたいです。
ソースは

//ファイルを転送する。
WebClient TestUp = new Client();
TestUp.Credentials = new NetworkCredential("ログインID","ログインパスワード");
    TestUp.Encoding = Encoding.GetEmcoding(51932);  //転送ファイルをeuc-jpにする。
    TestUp.UploadFile("ftp://xxx.xxx.xxx.xx/test.txt",Application.StartupPath + "\\Test.txt");

大体こんな感じです。
アップロードは正常にできるものの、UNIX上のVIコマンドで開いてみると文字化けしてしまいます。

文字コードの変換が正しくできていないのか、もしくは
ファイル転送モード(アスキーモード、バイナリモード等?)が設定できていない為かなと
予想はしているのですが、それ以上がわかりません。

転送先の文字コードはEUC-JPらしいのです(UNIX上)。
51932の部分を色々変えてみましたが変化がありませんでした。

なんとかテキストファイルの中の日本語を文字化けせずに転送する方法はないでしょうか。
よろしくお願いします。

引用返信 編集キー/
■6626 / inTopicNo.2)  Re[1]: FTPにファイルをアップロードすると日本語が文字化けします
□投稿者/ はつね (233回)-(2007/08/21(Tue) 00:49:03)
はつね さんの Web サイト
No6625 (ジョージ さん) に返信
> 文字コードの変換が正しくできていないのか、もしくは
> ファイル転送モード(アスキーモード、バイナリモード等?)が設定できていない為かなと
> 予想はしているのですが、それ以上がわかりません。

まずは状況を確認するしかないですね。該当のFTPサーバーはジョージさんしかお使いになれないので、確認して結果をアップしないと、みんなで予想しあうだけになってしまいます。

(1) ftpを使わずにencodeingしたものをファイル出力して、そのファイルの中身を確認
(2) (1)がOKなら、DOSプロンプトからftpつかってバイナリモード転送してして転送先でファイルの中身を確認

ところでどうしてSystem.Net.FtpWebRequest使わないのですか?
http://msdn2.microsoft.com/ja-jp/library/system.net.ftpwebrequest(VS.80).aspx
引用返信 編集キー/
■6628 / inTopicNo.3)  Re[2]: FTPにファイルをアップロードすると日本語が文字化けします
□投稿者/ Hongliang (169回)-(2007/08/21(Tue) 06:38:23)
Hongliang さんの Web サイト
Encoding プロパティの解説に、どういうときに使われるか書かれてますけど。
大体、元ファイルのエンコーディングが分からないのなら変換できません。
文字化けって言っても、(元ファイルが Shift_JIS として)アップロード先で Shift_JIS に対応したエディタで Shift_JIS として開けば普通に見られますでしょうし、そのままダウンロードしてくれば Windows 上で普通に読めるでしょう。
エンコーディングの変換が必須なら、直接 UploadFile するのではなく、アップロードする前に自前で変換してそれを UploadData する必要があります。
引用返信 編集キー/
■6630 / inTopicNo.4)  Re[3]: FTPにファイルをアップロードすると日本語が文字化けします
□投稿者/ ぽぴ王子 (254回)-(2007/08/21(Tue) 11:20:28)
ぽぴ王子 さんの Web サイト
はつねさんと Hongliang さんの回答を読むと、ジョージさんがいくつか勘違
いというか正しく理解されていないところがあるように思えます。

まず。
> Encoding プロパティの解説に、どういうときに使われるか書かれてますけど。
ということなので、Encoding プロパティの解説を見てみましょう。
http://msdn2.microsoft.com/ja-jp/library/system.net.webclient.encoding%28VS.80%29.aspx
> UploadString メソッドと UploadStringAsync メソッドは、指定した文字列
> をアップロードする前に、このプロパティを使用して文字列を Byte 配列に
> 変換します。
えーと、UploadFile に使用できるとは書いてありませんね。
なので、ここで Encoding プロパティをいくら設定しても無意味であろうと思
われます。

その場合はどうするかというと。
> エンコーディングの変換が必須なら、直接 UploadFile するのではなく、アップロードする前に自前で変換してそれを UploadData する必要があります。
です。
文字化けというか、要するにシフトJIS(だと思われる)ファイルを EUC-JP
に変換してアップロードしたい、とただそれだけの話ですね。
そしてそれには WebClient.Encoding プロパティは使えないと。
というわけで、アップロード前に EUC-JP に変換したものを転送するように
してください。
引用返信 編集キー/
■6631 / inTopicNo.5)  Re[4]: FTPにファイルをアップロードすると日本語が文字化けします
□投稿者/ 中博俊 (1149回)-(2007/08/21(Tue) 11:41:45)
中博俊 さんの Web サイト
とりあえず下記のURL確認してください。
http://www.microsoft.com/japan/msdn/netframework/skillup/core/article7.aspx

UploadString使えばいいんだけど、改行変換処理はしなくちゃいけないので、テンポラリファイルにeuc変換+crlf変換してアップロードした方が話は早いと思います。
引用返信 編集キー/
■6671 / inTopicNo.6)  Re[5]: FTPにファイルをアップロードすると日本語が文字化けします
□投稿者/ ジョージ (4回)-(2007/08/21(Tue) 21:13:02)
アドバイスありがとうございます。
皆様のおかげで無事解決しました。

>>はつね様
仕事中は事情により書き込みできない為、確認の結果報告が遅くなりました。
申し訳ありません。
1.の件ですが中身は文字化けしていませんでした。
昨日まではEUC-JPだから日本語の文字の変化はないはず
(SJISとEUX-JPは両方日本語だから日本語は変化ない)
と思ってたのですが
この時点で文字が代わってなければダメみたいでした。

2.はASCII、Binaryともに変化なしでした。

>>ところでどうしてSystem.Net.FtpWebRequest使わないのですか?

理由は・・・ありません。
C#は本当に触り始めたばかりで、今参考書やTipsを公開しているサイトを巡って書いています。
その中で、ファイルをアップロードするというのを見つけて参考にした結果
このようなコードになりました。
FtpWebRequestよりUploadFileの方が早く見つけた、ということくらいでしょうか・・・


>>Hongliang様

>>Encoding プロパティの解説に、どういうときに使われるか書かれてますけど。
>>大体、元ファイルのエンコーディングが分からないのなら変換できません。
>>文字化けって言っても、(元ファイルが Shift_JIS として)アップロード先で Shift_JIS に対応したエディタで Shift_JIS として開けば普通に見られますでしょうし、そのままダウンロードしてくれば Windows 上で普通に読めるでしょう。

確認した所、仰るとおりでした。
FFFTPのようにアップロード時に変換するのではなく
変換してからアップロードするとうまく行くようになりました。
ありがとうございました。


>>ぽぴ王子様

>>えーと、UploadFile に使用できるとは書いてありませんね。
>>なので、ここで Encoding プロパティをいくら設定しても無意味であろうと思
>>われます。

確かに・・・書かれていませんでした。
元々のサンプルコードではDownloadFileで使われていたのですが
Downloadで使えるならば、Uploadでも同じように使えるかな、という
安易な思い込みで失敗していました。
これからはできるだけ確認するようにします。


>>中博俊様
>>UploadString使えばいいんだけど、改行変換処理はしなくちゃいけないので、テンポラリファイルに>>euc変換+crlf変換してアップロードした方が話は早いと思います。

改行変換もしないといけないんですね。
皆様のアドバイスを参考にして

1.テキストファイルに書き込む内容を全て変数に格納する。
2.その変数を使ってEUC-JPでテキストファイルを作成する。
3.テキストファイルの中の改行コードを全て変換する。(\n→\r\n)
4.UploadFileでFTPに転送する。

という方法で無事文字化けせずに転送できました。


皆様の的確なアドバイス、本当に助かりました。ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -