喫茶XRAYトップページ

[スレッド全体
]

[4244] Re2:サイズも取得できます返信 削除
2011/1/19 (水) 12:57:33 DEKO
> と,言うか,日本語のファイル名など,眼中になかったというのが本音です.
デスヨネー (w

でも、普通のローカル PC でのファイルコピーのような操作を
FTP に求めるヒトって多いんですよね。

# そしてまた文字コードの説明から始まる...orz

[4247] Re3:サイズも取得できます返信 削除
2011/1/20 (木) 00:56:17 たたみや
▼ DEKOさん こんばんは

DEKOさんのサイトも、よく拝見させて頂いております。
大変勉強になります。ありがとうございます。

件の「ファイル名の文字化け」ですが、実害は無いので
後に回してしらんぷりしておきます(^^;;)

まだ試してはいませんが、ここらあたりでしょうか。
http://www.watercolor-city.net/ct_delphi/delphi_tiburon/doc_thirdparty/tp_indy_getwithtencoding.htm
http://www.ipentec.com/document/document.aspx?page=delphi2009-indy

ありがとうございました。

[4248] ファイルリストの日本語ファイル名の処理返信 削除
2011/1/20 (木) 13:10:59 Mr.XRAY
▼ たたみやさん,こんにちは.

ファイルリストの方も,文字化け対策コードを追加して確認しました.
ただし,

http://mrxray.on.coocan.jp/Delphi/plSamples/774_Indy_FTPDirFileList.htm#02

でテストしています.ファイルリストで,日本語のフォルダ名があった場合に
それを展開する時も同様な処理が必要となります.
もちろん,ディレクトリ名に日本語があった場合など...
いろいろ思考(試行?)をめぐらせています.

どういう形でサンプルプログラム集の見直しをするかも悩んでいます.
MECSUtilsの機能の一部しか利用しないので,直接コードにしてしまうと,
先のコード,

>  //目的のファイルがあるディレクトリに移動
>    IdFTP1.ChangeDir(FTP_Root_Dir+target_dir);
>    IdFTP1.List;
>    if Assigned(IdFTP1.DirectoryListing) then
>     begin
>      for i:=0 to IdFTP1.DirectoryListing.Count-1 do
>       begin
>        AFTPItem := IdFTP1.DirectoryListing.Items[i];
>        if (AFTPItem.FileName)=fname then
>         begin
>          FTP_FileSize := AFTPItem.Size;
>          break;
>         end;
>        end;
>      end;


このコードで,問題となるのはAFTPItem.FileNameです.
var
  FileName : String;
とでも定義して,以下の関数,関数内関数でもいいと思います.を作成します.

  function ChangeCodePage_forDisp(S : String) : String;
  var
    i  : Integer;
    U8 : UTF8String;
  begin
    SetLength(U8, Length(S));
    for i := 1 to Length(S)  do begin
      U8[i] := AnsiChar(S[i]);
    end;
    Result := UnicodeString(U8);
  end;

そして,この関数を使用して,

    FileName := ChangeCodePage_forDisp(FileName);

としてFileNameのコードを変換します.

掲示板ご覧の他の方へ.
このコードは,Delphi 2009以降,ホストのファイル名の日本語文字が
UTF-8の場合のものですので注意.
Shift-JISの場合は,

type
  SJISString = type AnsiString(932);   // Shift-JIS(CP932)

と宣言して,
U8 : UTF8Stringの代わりに使用します.
Delphi 2007以前では,Shift-JISの場合,この処理は必要ありません.


[4249] Re:ファイルリストの日本語ファイル名の処理返信 削除
2011/1/20 (木) 13:50:02 たたみや
▼ Mr.XRAYさん こんにちは

> ファイルリストの方も,文字化け対策コードを追加して確認しました.

いろいろとありがとうございました。
ばっちり日本語が表示されました。
お手数おかけしました。m(__)m

> でテストしています.ファイルリストで,日本語のフォルダ名があった場合に
> それを展開する時も同様な処理が必要となります.
> もちろん,ディレクトリ名に日本語があった場合など...
> いろいろ思考(試行?)をめぐらせています.


個人的な考えですが、linuxサーバに(?他もあるけど)Webデータを置く場合
日本語のファイル名を使うのは、それ自体が間違いだと思いますので、
マスターのサンプルコードにまで反映させなくてもよいと思います。
ただ貴重な「文字変換のサンプル」ですので、別途サンプルとして
どこかに残して頂ければうれしいです。

今回の私の場合ですが、VirtualBox + Vine5.2の環境で、phpがらみの
ホームページ作成実験をしていました。
ものぐさなもので、実際使わない画像ファイルも全部転送したら
日本語名が文字化けしたのでした。

また
type
  EUC_String = type AnsiString(20932);//  EUC-JP
  SJIS_String = type AnsiString(932); // Shift-JIS
var
  EU : EUC_String;
  SJ : SJIS_String;

とすれば、EUC-jpなんかも行けますよね。
本当にありがとうございました。


[4250] Re2:ファイルリストの日本語ファイル名の処理返信 削除
2011/1/20 (木) 14:11:54 Mr.XRAY
▼ たたみやさん こんにちは

> マスターのサンプルコードにまで反映させなくてもよいと思います。
> ただ貴重な「文字変換のサンプル」ですので、別途サンプルとして
> どこかに残して頂ければうれしいです。


これを読んで,少し救われました.
何かヒントぐらいは書いておきたいと思います.
DEKOさんの資料へのリンクだけだったりして... (笑)

> とすれば、EUC-jpなんかも行けますよね。

一応StringCodepage(AFTPItem.FileName)を使うと,自動判別して,処理を
分岐することもできます(確認済み).


[4251] Re2:ファイルリストの日本語ファイル名の処理返信 削除
2011/1/20 (木) 14:23:08 Mr.XRAY
▼ たたみやさん こんにちは

> 今回の私の場合ですが、VirtualBox + Vine5.2の環境で、phpがらみの
> ホームページ作成実験をしていました。


そうですよね.phpに,私も移行したいな〜,と思っているのですが,
文字コードも,今はShift-JISなんですが,UTF-8にでもしたいです.
時代に取り残されないように.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82