cpdfを使用してPDFファイルを連結しています。Process.Startに渡される引数の文字列エンコーディングエラー
それは、このコードによって行われます:
Private Shared Sub ConcatenateWithCpdf(
outputFileName As String,
inputfilenames() As String,
Optional timeout As Integer = 15000,
Optional ByRef process_exitcode As Integer = 0,
Optional ByRef process_output As String = Nothing,
Optional ByRef process_erroroutput As String = Nothing)
Dim output As New Text.StringBuilder()
Dim erroroutput As New Text.StringBuilder()
Using process As New Process()
process.StartInfo.FileName = CpdfPath()
process.StartInfo.Arguments = String.Format(
"{0} -o ""{1}""",
Join(
inputfilenames.Select(
Function(s) String.Format("""{0}""", s)).ToArray,
" "),
outputFileName)
process.StartInfo.CreateNoWindow = True
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardOutput = True
process.StartInfo.RedirectStandardError = True
Using outputWaitHandle As New Threading.AutoResetEvent(False)
Using errorWaitHandle As New Threading.AutoResetEvent(False)
AddHandler process.OutputDataReceived,
Sub(sender As Object, e As DataReceivedEventArgs)
If e.Data Is Nothing Then
outputWaitHandle.Set()
Else
output.AppendLine(e.Data)
End If
End Sub
AddHandler process.ErrorDataReceived,
Sub(sender As Object, e As DataReceivedEventArgs)
If e.Data Is Nothing Then
errorWaitHandle.Set()
Else
erroroutput.AppendLine(e.Data)
End If
End Sub
process.Start()
process.BeginOutputReadLine()
process.BeginErrorReadLine()
If process.WaitForExit(timeout) AndAlso
outputWaitHandle.WaitOne(timeout) AndAlso
errorWaitHandle.WaitOne(timeout) Then
process_exitcode = process.ExitCode
End If
End Using
End Using
End Using
process_output = output.ToString
process_erroroutput = erroroutput.ToString
End Sub
私の問題は、一部の入力ファイル名は次のように、非ASCII文字を持って、次のとおりです。この場合、
C:\Users\myuser\AppData\Local\Temp\Procuração - Processo 5001092-92.2017.4.03.6114.pdf
、CPDFに障害が発生し、
cpdfがエラーを検出しました。技術的な詳細は以下のとおりです。
C:\ Users \ユーザーmyuserの\のAppData \ローカル\ Tempに\Procurac¸a〜0 - Processoの5001092-92.2017.4.03.6114.pdf:そのようなファイルやディレクトリはありません
明らか
を引数を渡すときに、ある種のエンコーディングの不一致によってfilenameが壊れていました。
どうすればこの問題を解決できますか?
入力ファイル名のリストを取得したり生成したりするにはどうすればよいですか? –
@Idle_Mind、彼らは電子メールの添付ファイルのリストです。元の名前が付いています。しかし、私はエラーが発生した時点ですでにディスクに保存されているので、その名前がWindowsで有効であると確信しています。 – VBobCat