掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
iOSでテンポラリフォルダに日本語のファイル名を保存できない。 (ID:150784)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
takeさん いつもありがとうございます。 日本語のファイル名ですがURLエンコードで保存できました。 ちにみにURLエンコードは TNetEncoding.URL.Encode関数 があります。 アドバイス大変ありがとうございました。 ただ、前回投稿させていただいた共有メニューでSLACK等でファイル渡しを行うと %E8%B3%87%E6%96%99.pdf というファイル名になってしまいました。 ファイル保存するときに%をエスケープしないといけないのかもしれません。 そこでTNetHTTPRequestのGetでファイルを、MemoryStreamではなく、 FileStreamに取得したら、日本語のファイル名で保存でき、かつ、共有メニューから ファイル渡しした際も正しい日本語表示にすることができました。 参考までサンプルソースを貼っておきます。 ■サンプルソース unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, System.Net.HttpClientComponent,System.IOUtils, System.Net.URLClient, System.Net.HttpClient, FMX.WebBrowser {$IFDEF IOS} ,DW.ShareItems {$ENDIF} ; type TForm1 = class(TForm) Button1: TButton; NetHTTPClient1: TNetHTTPClient; NetHTTPRequest1: TNetHTTPRequest; WebBrowser1: TWebBrowser; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { private 宣言 } {$IFDEF IOS} FExcluded: TShareActivities; FShareItems: TShareItems; {$ENDIF} public { public 宣言 } end; var Form1: TForm1; implementation uses System.Permissions, DW.Consts.Android, DW.Permissions.Helpers, System.NetEncoding; {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); var LFileName: string; LResponseContent: TFileStream; App: Pointer; begin LFileName := TPath.Combine(TPath.GetTempPath, '資料.pdf'); LResponseContent := TFileStream.Create(LFileName, fmCreate); try NetHTTPRequest1.Get('https://www5.cao.go.jp/keizai-shimon/kaigi/minutes/2023/0124/gijiyoushi.pdf', LResponseContent); LFileName := TPath.Combine(TPath.GetTempPath, TNetEncoding.URL.Encode('資料.pdf')); WebBrowser1.URL := 'file://' + LFileName; finally LResponseContent.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); begin {$IFDEF IOS} PermissionsService.RequestPermissions([cPermissionReadExternalStorage, cPermissionWriteExternalStorage], procedure(const APermissions: TPermissionArray; const AGrantResults: TPermissionStatusArray) var LFileName: string; begin if AGrantResults.AreAllGranted then begin LFileName := TPath.Combine(TPath.GetTempPath, '資料.pdf'); FShareItems.AddFile(LFileName); FShareItems.Share(Button2, FExcluded); end; end ); {$ENDIF} end; procedure TForm1.FormCreate(Sender: TObject); begin {$IFDEF IOS} FShareItems := TShareItems.Create; {$ENDIF} end; procedure TForm1.FormDestroy(Sender: TObject); begin {$IFDEF IOS} FShareItems.Free; {$ENDIF} end; end.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.