こんにちは
UiPathでInvokePowershellを使ってpowershellのコマンドを流した際、「出力」のところに設定した変数に実行結果が返ってくると思うのですが、その実行結果が文字化けしてしまいます。
powershellで標準で定められている文字コードとUiPath上での文字コードが違うのでしょうが、どのようにすれば対応可能でしょうか?
↓のreturn_vaulesの中身が文字化けしてしまいます
こんにちは
UiPathでInvokePowershellを使ってpowershellのコマンドを流した際、「出力」のところに設定した変数に実行結果が返ってくると思うのですが、その実行結果が文字化けしてしまいます。
powershellで標準で定められている文字コードとUiPath上での文字コードが違うのでしょうが、どのようにすれば対応可能でしょうか?
↓のreturn_vaulesの中身が文字化けしてしまいます
こんにちは
内部で何を出力しているか共有可能でしょうか?
あるいはスクリプトの最初に
$OutputEncoding = [System.Text.Encoding]::shift_jis
をつけてみて改善するか確認することは可能でしょうか?
コメントありがとうございます。
コードの内部に
$OutputEncoding = [System.Text.Encoding]::shift_jis
を付けてみたのですが戻り値は文字化けしたままでした。
念のため同様にutf8も試してみましたが変わらずでした。
コマンドテキスト部分の記載内容としては以下の通りです。
“cd $a
box files:upload $c --parent-id $b”
外部ソフトウェアのBOXのCLIを入れてコマンドを使っています。ただ、powershellのコマンドラインで同じコマンドを流すと正常に返ってくること、また、文字化けして返ってきている文字を文字化け復元するとある程度は正しく返ってきていることが確認できるため、文字コードの指定でどうにかならないでしょうか?
こんにちは
使用しているSysytem.Acitivites packgeのバージョンと、プロジェクトの対応OS(WIndows or Windows-legacy)を共有可能でしょうか?
こんにちは
以下のスクリプトを実行してみてもらえますでしょうか?BOXコマンドはフルパスで指定してもらえればと思います。($pinfo.FileNameの部分)
test0628.txt (615 Bytes)
cd $a
$pinfo = New-Object System.Diagnostics.PRocessStartInfo
$pinfo.FileName = "box"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.StandardOutputEncoding = [System.Text.Encoding]::UTF8
$pinfo.StandardErrorEncoding = [System.Text.Encoding]::UTF8
$pinfo.UseShellExecute =$false
$pinfo.Arguments ="files:upload "+$c+" --parent-id "+$b
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
$content = $p.StandardOutput.ReadToEnd()
$stderr = $p.StandardError.ReadToEnd()
Write-Output $content
Write-Output $stderr
以下の様の一旦ファイルの内容を文字列にして、それをInvokePowershellに与えてください。
コメントありがとうございます。
System.Activitysのバージョンが22.4.5で、対応OSはwindows-レガシになります。
またUiPath自体のバージョンは2022.4.4となります。
頂いたものを下図のように試したところ、次のような文字化けとなってしまいました。
�J���Ҍ���\01_RPA�J�����ʕ�\RPA�v���W�F�N�g�t�@�C��
ご相談する前までは、?マークではなく別の文字に変換される文字化けだったので事象は変化しております。
こちらで何かお判りでしょうか?
お手数をおかけしますがご確認の程よろしくお願いします。
こんにちは
UTF8の部分をshift_jis またはUNICODEに変えてみた場合どうなるか試せますでしょうか?
たびたび恐縮ですが、上記をpowershellを用いてコールする理由は何かありますでしょうか?
上記のPowerShellスクリプトは、そのままUiPathでワークフローとして実装できますので
PowerShellでコールする理由が特段無ければ、UiPathで直接実装したほうが、文字コード周りで
悩まなくても良いかもしれません。
UTF8の部分をshift_jisに変えてみたところ、うまく表示される場合とされない場合があり、検証したところ以下のように違いがありました。
正常に処理が終わって戻り値が返ってくる場合
utf8:文字化けなし
shift_jis:文字化けあり(繧ソ繧、繝医Ν縺ェのような文字化け)
エラー(boxのファイルアップロードコマンド実行時に既に存在するファイルだったエラー)の場合
uft8:文字化けあり(���Ҍ���のような文字化け)
shift_jis:文字化けなし
上記をpowershellを用いてコールする理由は何かありますでしょうか?
上記のPowerShellスクリプトは、そのままUiPathでワークフローとして実装できますので
PowerShellでコールする理由が特段無ければ、UiPathで直接実装したほうが
こちらについては、そのままUiPathでワークフローとして実装するということの意味がよく分からないのですが、今やっている方法以外の方法がありますでしょうか?
過去に試した方法として、invokepowershellでps1ファイルを呼び出すためのpowershellのコマンドを記載するという方法もやっていたのですが、その場合には括弧やハイフンが含まれた場合にpowershell上でコマンドが分割されてしまい、invokepowershellでコマンド単体と引数をそれぞれ渡す方法にしています。
お手数をおかけしますがご教示いただければと思います。
こんにちは
あるいは引数として入力している文字のエンコーディングと、コマンドから返る文字列のエンコーディングが統一されていないのかもしれません。実際の動作は文字化けしていても問題なさそうでしょうか?
こちらについては、そのままUiPathでワークフローとして実装するということの意味がよく分からないのですが、今やっている方法以外の方法がありますでしょうか?
すべてワークフローでもかけますがコード量が少々多いので一旦InvokeCodeでの呼び出し例記載します。
Encoding周りは適当に変えてもらった方が良いと思います。
Dim pinfo As System.Diagnostics.ProcessStartInfo = New System.Diagnostics.ProcessStartInfo()
pinfo.FileName = "box"
pinfo.RedirectStandardError = True
pinfo.RedirectStandardOutput = True
pinfo.StandardOutputEncoding = System.Text.Encoding.Unicode
pinfo.StandardErrorEncoding = System.Text.Encoding.Unicode
pinfo.UseShellExecute =False
pinfo.Arguments ="files:upload "+in_arg1+" --parent-id "+in_arg2
Dim p As System.Diagnostics.Process = New System.Diagnostics.Process()
p.StartInfo = pinfo
p.Start()
p.WaitForExit()
out_content = p.StandardOutput.ReadToEnd()
out_stderr = p.StandardError.ReadToEnd()
コメントありがとうございます。
頂いた方法で実装して、文字コードはutf-8とshift_jisをそれぞれ試したところ、powershellと同じように戻り値とエラー内容が片方文字化けとなってしまいました。
ただ、outputencodingとerrorencodingで指定している文字コードをそれぞれutf-8とshift_jisに変えたところどちらも文字化けせずに返ってきまして、期待する結果を出力することができました。
(見返すと、初めに頂いたpowershellのコマンドでもoutputとerrorで文字コードを分ければうまくいったように思います)
ご回答いただきありがとうございました。
This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.