GhostScript.net无法识别fileName

时间:2019-07-08 06:08:37

标签: path filenames ghostscript ghostscript.net

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”; (包含%)    字符串outputFile =“ D:\ output.pdf”; (不包含%)

有效,没问题

,如果将文件路径更改为同伴

string inputFile =“ D:\你.pdf”;    字符串outputFile =“ D:\ output.pdf”;

inputFile =“ D:\你.pdf”“你”是汉字

这也不行

如果文件路径包含汉字,则我还要进行更多测试    有效。

有人可以提供一些建议吗?非常感谢。

我做了一些更改以将文件名转换为UTF8

UTF8Encoding utf8 =新的UTF8Encoding();

string inputFile =“ D:\你.pdf”;   字符串outputFile =“ D:\%91.pdf”;

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

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

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

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

结果相同

1 个答案:

答案 0 :(得分:0)

在文件名未表示为UTF-8的平台上,Ghostscript可执行文件(与Ghostscript.NET使用的DLL相反)将文件名转换为UTF-8。例如,在Windows上,非拉丁文件名采用宽字符格式,并且Ghostscript前端可执行文件会将它们传递给DLL之前将其转换为UTF-8。

DLL不会自行执行此操作。由调用者(在本例中为Ghostscript.NET或您的代码)决定是否传递给DLL的任何文件名都采用UTF-8格式。