WKWebView上传文件名称包含中文字符会导致代码乱码

问题描述 投票:1回答:2

我正在开发一个Mac应用程序,只是一个封装在WKWebView中的简单Web应用程序。

以下是我尝试上传名称中包含特殊字符的文件时的代码:

-(void)webView:(WKWebView *)webView runOpenPanelWithParameters:(WKOpenPanelParameters *)parameters initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSArray<NSURL *> * _Nullable))completionHandler
{
     DEBUG_FUNC(@"");

     NSOpenPanel* openDlg = [NSOpenPanel openPanel];
    [openDlg setCanChooseFiles:YES];
    [openDlg setCanChooseDirectories:NO];
    [openDlg setPrompt:NSLocalizedString(@"Choose", nil)];
    openDlg.allowsMultipleSelection = YES;

    if ( [openDlg runModal] == NSOKButton ) 
    {
        if (completionHandler)
        {
            completionHandler([openDlg URLs]);
        }
    }  
}

当我使用WebView时,这种方式可以工作,因此它不应该是Web问题。

但由于该项目使用了WKWebView, 例如:通过WKWebView上传后,文件“证书.p12”将更改为“è¯ä¹| .p12”。有谁知道如何解决它? 谢谢!

ios objective-c macos wkwebview
2个回答
0
投票

我已将此问题发布到https://bugs.webkit.org所以这是WebKit开发人员确认的WebKit错误,请参阅https://bugs.webkit.org/show_bug.cgi?id=172849中的更多内容


0
投票

你的代码中存在一些小缺陷(就像你在取消后没有调用处理程序一样),它也已经过时了......

- (void)webView:(WKWebView *)webView runOpenPanelWithParameters:(WKOpenPanelParameters *)parameters initiatedByFrame:(WKFrameInfo *)frame completionHandler:(nonnull void (^)(NSArray<NSURL *> * _Nullable))completionHandler{

    NSOpenPanel * openDialog = [NSOpenPanel openPanel];
    [openDialog setCanChooseFiles:YES];
    [openDialog setCanChooseDirectories:NO];
    openDialog.allowsMultipleSelection = NO;

    [openDialog beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse result) {
        if (result == NSModalResponseOK) {
            completionHandler([openDialog URLs]);
        } else {
            completionHandler(nil);
        }
    }];

}
© www.soinside.com 2019 - 2024. All rights reserved.