Encoding: "Shift-JIS"로 CSV 파일 만들기

Encoding을 「Shift-JIS」로 설정해 CSV 파일을 만들고 싶습니다.
오류를 해결하는 방법이나 실행 환경에서 구현하는 방법을 알려주시기 바랍니다.
<실행 환경>
・UiPath Studio 2024.10.1
・Windows-레거시
・UiPath.System.Activities = 22.4.1
・UiPath.UIAutomation.Activities = 22.4.9
・UiPath.Excel.Activities = 2.8.6
・UiPath.Mail.Activities = 1.8.6

【발생한 오류】
・「WriteCsvFile」에서 Encoding을 "Shift-JIS"로 설정하고 실행하면 다음 오류가 발생합니다.
<오류 내용>
CSV에 쓰기: 메서드를 찾을 수 없습니다: ‘Void CsvHelper.CsvWriter..ctor(System.IO.TextWriter)’

・아래 「참고 URL」에 기재된 메서드 호출을 추가해 보았지만, 오류가 발생해 구현할 수 없었습니다.
참고 URL:【UiPath】UiPathで「Shift-Jis」が使えない場合の対処法 #UiPath - Qiita
<오류 내용>
메서드 호출
식 "System.Text.CodePagesEncodingProvider.Instance"를 처리하는 중 컴파일 오류가 발생했습니다. 기본 클래스 'System.Text.EncodingProvider’가 포함된 어셈블리 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51’에 대한 참조가 필요합니다. 프로젝트에 참조를 추가하세요.

・Invoke Code를 사용해 CSV 파일을 만드는 방법도 시도했지만, 「shift_JIS」는 Encoding의 멤버가 아니라는 오류가 발생해 CSV 파일을 만들 수 없었습니다.

오류가 발생하는 이유는 현재 버전의 UiPath에서 Write CSV가 Shift-JIS를 완전히 지원하지 않기 때문인 것 같습니다. 가장 안정적인 해결 방법은 Invoke Code에서 StreamWriter와 Encoding.GetEncoding("shift_jis")를 사용하는 것입니다. CodePagesEncodingProvider를 등록하거나 UTF-8로 변환하는 등의 다른 우회 방법은 Windows-Legacy에서 안정성이 떨어집니다.

감사합니다

답변 감사합니다.
그런데 Invoke Code를 사용한다면 어떤 코드를 작성해야 할지 조언해 주실 수 있을까요?

안녕하세요 @u_e, 이 방법을 시도해 보세요.

Dim enc = System.Text.Encoding.GetEncoding(932) ' Shift-JIS

Function EscapeCsv(v As String) As String
    If v Is Nothing Then Return ""
    If v.Contains(","c) OrElse v.Contains(""""c) OrElse v.Contains(vbCr) OrElse v.Contains(vbLf) Then
        v = v.Replace("""", """""")
        Return """" & v & """"
    End If
    Return v
End Function

Using sw As New System.IO.StreamWriter(in_FilePath, False, enc)
    ' Header
    sw.WriteLine(String.Join(",", in_DataTable.Columns.Cast(Of System.Data.DataColumn).Select(Function(c) EscapeCsv(c.ColumnName))))
    ' Rows
    For Each r As System.Data.DataRow In in_DataTable.Rows
        sw.WriteLine(String.Join(",", r.ItemArray.Select(Function(f) EscapeCsv(If(f, "").ToString()))))
    Next
End Using

AI가 생성한 코드라 테스트하지 않았으니, 시도해 보시고 필요하다면 수정해 주세요.
또한 인수가 다음과 같은지 확인해 주세요.
in_DataTable (In, System.Data.DataTable) 및 in_FilePath (In, String)

감사합니다.

안녕하세요

이 오류는 액티비티 패키지 종속성 버전 불일치로 인해 발생한 것 같습니다.

Excel.Activiites.Package를 더 높은 버전으로 업그레이드할 수 없을까요?

아래 「참고 URL」에 기재된 메서드 호출을 추가해 보았는데요.

이는 Windows 프로젝트에 관한 내용이므로 Windows 레거시와는 관련이 없을 것 같습니다.

답변 감사합니다.

Excel.Activiites.Package를 더 높은 버전으로 업그레이드할 수는 없을까요?

개발 환경상의 사정으로 더 높은 버전으로 업그레이드하기가 어렵습니다.
현재 버전 그대로 개발을 진행하고 싶습니다.

아마 System.Activites 패키지와 Excel.Activites 패키지의 종속성 문제로 발생한 것으로 보입니다. 따라서 CSV 쓰기 액티비티의 문제를 해결하려면 액티비티 패키지 버전을 변경해야 할 것 같습니다(EXCEL 버전을 올리거나 System 버전을 낮추는 방법).

우회 방법으로는 DataTable을 Output DataTable 액티비티로 일단 문자열로 출력한 다음, WriteTextFile 액티비티를 사용해 파일에 쓰는 방법이 유효할 수 있습니다.