WKWebView upload file which name contains Chinese character results in garbled code

Viewed 762

I am working on a Mac app, just a simple web application encapsulated in WKWebView.

Here is the code when I tring to upload a file which name contains special character:

-(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]);
        }
    }  
}

When I was using WebView, this way can work, so it should not be a web problem.

But since the project used WKWebView,
for example: file "证书.p12" would be changed to "è¯ä¹¦.p12" after uploaded via WKWebView. Anyone know how to solve it?
Thanks!

2 Answers

there are some small flaws in your code (like you don't invoke the handler after cancel), also it is outdated...

- (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);
        }
    }];

}
Related