GhostScript.net не распознает специальный символ в fileName - PullRequest
0 голосов
/ 08 июля 2019
private static string[] GetArgs(string inputFile, string outputFile)
{
    return new[] {
    $"gs",
    $"-o",
    $"{outputFile}",
    $"-dNoOutputFonts",
    $"-sDEVICE=pdfwrite",
    $"{inputFile}",
 }; 


GhostscriptProcessor ghostscript = new GhostscriptProcessor();
string inputFile = "D:\\%1.pdf";
string outputFile = "D:\\%output.pdf";
ghostscript.Process(GetArgs(inputFile, outputFile));

there will be an error "An error occured when call to 

'gsapi_init_with_args' сделано: -100 "

но если изменить путь к файлу как стипендиат

string inputFile = "D: \% 1.pdf"; (содержит %) string outputFile = "D: \ output.pdf"; (не содержит%)

это работает, нет проблем

и если изменить путь к файлу как стипендиаты

string inputFile = "D: \ 你 .pdf"; string outputFile = "D: \ output.pdf";

inputFile = "D: \ 你 .pdf" "你" - китайский символ

это тоже не работает

и у меня есть еще тест, если путь к файлу содержит китайский символ, а не работы.

Кто-нибудь может дать совет? Большое спасибо.

я делаю некоторые изменения, чтобы преобразовать fileName в UTF8 как стипендиаты

UTF8Encoding utf8 = new UTF8Encoding ();

string inputFile = "D: \ 你 .pdf"; string outputFile = "D: \% 91.pdf";

Byte [] inputFileEncodedBytes = utf8.GetBytes (inputFile);

Byte [] outPutFileEncodedBytes = utf8.GetBytes (outputFile);

string strInput = System.Text.Encoding.UTF8.GetString (inputFileEncodedBytes);
string strOutPut = System.Text.Encoding.UTF8.GetString (outPutFileEncodedBytes);

ghostscript.Process (GetArgs (strInput, strOutPut));

результат тот же

1 Ответ

0 голосов
/ 08 июля 2019

Исполняемый файл Ghostscript (в отличие от библиотеки DLL, используемой Ghostscript.NET) будет на платформах, где имя файла не выражено как UTF-8, преобразовывать имя файла в UTF-8. Например, в Windows нелатинские имена файлов имеют формат широких символов, и исполняемый файл Ghostscript преобразует их в UTF-8 перед передачей в DLL.

DLL не будет делать это самостоятельно. Это зависит от вызывающей стороны (или Ghostscript.NET, или вашего кода в данном случае), чтобы гарантировать, что любые имена файлов, передаваемые в DLL, находятся в форме UTF-8.

...