LoginSignup
1
4

More than 3 years have passed since last update.

【UiPath】テキスト、CSVファイルをUTF-8で書き込むとBOMが付く

Last updated at Posted at 2019-07-05

現象

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)

引数は以下の通り。in_filePathにBOMを取り除きたいファイルのパスを指定する。
03.png

実行後のファイルを確認してみると、作成されたファイルのBOMが無くなっていることが分かる。
04.png

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4