現象
UiPathで作成したテキストファイルまたはCSVファイルを他のところで使用するときに、「不正な文字がある」等のエラーが出て上手くいかない。
原因
もしかしたら文字コード「UTF-8」のBOMが原因かも知れない。
UiPathでテキストファイルやCSVファイルを作成するとき、エンコーディングの指定を空白または「UTF-8」にした場合、BOM付UTF-8になる。
「BOM」とはテキストファイルの始めに付く見えない記号のようなもので、そのファイルがどんな文字コードで書かれているかを教えてくれる。
ただし、UTF-8においては「付けない方が良い」とされているので、BOMが付いていると上手く読み込めなくなるシステムも多い。
作成されたファイルにBOMがあるかどうか確認するためには、サクラエディタなど、(メモ帳よりは)高機能なテキストエディタを使用して、ファイルを開いてみると良い。
UiPathでのBOM無しUTF-8のファイル作成方法
ファイル書き込みのプロパティを見てもBOM無しで出力する方法は見当たらないため、自力でBOMをなくすフローを加える必要がある。
BOM削除のサンプル
テキストファイル書き込み後にコードを呼び出し
を追加する。
コードを編集
ボタンを押した後のウィンドウに、下記コードを貼り付ける。
このコードでは、指定されたファイルを一旦BOM有UTF-8で読込み、その内容をBOM無UTF-8にしてファイルに書き込んでいる。
If Not File.exists(in_filePath) Then
Exit Sub
End If
Dim tmpPath As String = in_filePath & ".tmp"
File.Move(in_filePath, tmpPath)
Using reader As New StreamReader(tmpPath, New System.Text.UTF8Encoding(True))
Using writer As New StreamWriter(in_filePath, False, New System.Text.UTF8Encoding(False))
Dim line As String = reader.ReadLine
Do While line IsNot Nothing
writer.WriteLine(line)
line = reader.ReadLine
Loop
End Using
End Using
File.Delete(tmpPath)