cancel
Showing results for 
Search instead for 
Did you mean: 

File Management - JP(日本語版)の UTF-8 のBOM有り無しの設定

TakashiSatoh
Level 4
エキスパートの皆さま
標記の通り、DX でBlue Prism 社から提供いただいている、File Management - JP(日本語版)で
ファイルの書き出し時のエンコード設定で、UTF-8 のBOM有り無しの設定で苦労しています。

下記プロパティの Encode の Value 欄に何かしら入力するかと思いますが、
リンク先のマイクロソフト社のサイトを参照してもよくわかりません。

また下記の「文字コード指定」のない「ファイルにテキストを書き出す」アクションは、基本どのようなエンコードを自動設定するのでしょうか?

2253.png


------------------------------
Takashi Satoh
Senior Expert
NetOne Systems
Asia/Tokyo
------------------------------
1 BEST ANSWER

Best Answers

HitoshiNamiki
Level 5
UTF-8(BOM有り)であれば、Encodeには「utf-8」と入力します。

UTF-8(BOM無し)は指定できないと思います。
このアクションでは System.Text.Encoding.GetEncoding(String)を使用しているためです。
そのため、UTF-8(BOM無し)にしたい場合は「文字コード指定」のない「ファイルにテキストを書き出す」を使うことになります。

「文字コード指定」のない「ファイルにテキストを書き出す」はFile.WriteAllTextのエンコード指定無しですので、UTF-8(BOM無し)が使用されます。
https://docs.microsoft.com/ja-jp/dotnet/api/system.io.file.writealltext?view=netframework-4.8#System_IO_File_WriteAllText_System_String_System_String_

もし「文字コード指定」のある「ファイルにテキストを書き出す」を変更することが可能でしたら、
以下のようにする方法もあります。
Try
	If String.IsNullOrEmpty(Encode) Then
		File.WriteAllText(File_Name, Text)
	Else
		File.WriteAllText(File_Name, Text, System.Text.Encoding.GetEncoding(Encode))
	End If

	Success = True
	Message = ""
Catch e As Exception
	Success = False
	Message = e.Message
End Try​



------------------------------
Hitoshi Namiki
Section Chief
TKC Corporation
------------------------------
※当回答は個人的な見解です。間違い等があってもご容赦ください。あくまで自己責任でお願いいたします。 [FirstName] [LastName] Application Developer Utsunomiya, Japan

View answer in original post

4 REPLIES 4

HitoshiNamiki
Level 5
UTF-8(BOM有り)であれば、Encodeには「utf-8」と入力します。

UTF-8(BOM無し)は指定できないと思います。
このアクションでは System.Text.Encoding.GetEncoding(String)を使用しているためです。
そのため、UTF-8(BOM無し)にしたい場合は「文字コード指定」のない「ファイルにテキストを書き出す」を使うことになります。

「文字コード指定」のない「ファイルにテキストを書き出す」はFile.WriteAllTextのエンコード指定無しですので、UTF-8(BOM無し)が使用されます。
https://docs.microsoft.com/ja-jp/dotnet/api/system.io.file.writealltext?view=netframework-4.8#System_IO_File_WriteAllText_System_String_System_String_

もし「文字コード指定」のある「ファイルにテキストを書き出す」を変更することが可能でしたら、
以下のようにする方法もあります。
Try
	If String.IsNullOrEmpty(Encode) Then
		File.WriteAllText(File_Name, Text)
	Else
		File.WriteAllText(File_Name, Text, System.Text.Encoding.GetEncoding(Encode))
	End If

	Success = True
	Message = ""
Catch e As Exception
	Success = False
	Message = e.Message
End Try​



------------------------------
Hitoshi Namiki
Section Chief
TKC Corporation
------------------------------
※当回答は個人的な見解です。間違い等があってもご容赦ください。あくまで自己責任でお願いいたします。 [FirstName] [LastName] Application Developer Utsunomiya, Japan

Hitoshi Namiki-san

さっそくの返答ありがとうございます
早速試してみようと思います。
やっぱりコミュニティに聞いてみて良かった ☺

更新
頂いたアドバイスのポイント、見事にビンゴでした!
実はこのジョブ、SAP に入金明細データを投入する際の全銀手順ファイルに対して、入金の都度口座名義人名称が微妙に変わる支払人様の場合、データ取込後 SAP 内の後処理で支払人コードを付加できない問題を解決するためのものなのですが、
肝心の編集後の全銀手順ファイルが SAP にはねられてしまうというシャレにならない問題であったのです。
本当に助かりましたー
今後できるかどうかわかりませんが、自分もなにかしらコミュニティに貢献したいと思いますー (技術的にはほぼ無理⤵)

------------------------------
Takashi Satoh
Senior Expert
NetOne Systems
Asia/Tokyo
------------------------------

追加のご相談です

Namiki-san のアドバイス通り、Encodeに "utf-8" を設定したところ、
結果的に作成されるテキストファイルが、必ず UTF-8 (BOM有り) となる場合と、 UTF-8 となる場合に二分されます。(再現性あり)
特に "utf-8" を設定しているにもかかわらず、 UTF-8 となってしまう理由はなにかあるのでしょうか。


------------------------------
Takashi Satoh
Senior Expert
NetOne Systems
Asia/Tokyo
------------------------------

「ファイルにテキストを追加」のほうの話ではないですよね?
「ファイルにテキストを追加」の場合は、元のファイルの文字コードのままとなります。

「ファイルにテキストを書き出す」のほうで「utf-8」を指定しているのに
BOM無しになるケースはちょっとわからないですね💦

一応、必ずUTF-8(BOM付き)で書き出すコードものせておきます。
Try
	Dim enc As System.Text.Encoding = New System.Text.UTF8Encoding(True)
	File.WriteAllText(File_Name, Text, enc)

	Success = True
	Message = ""
Catch e As Exception
	Success = False
	Message = e.Message
End Try​


------------------------------
並木 仁(Hitoshi Namiki)
株式会社TKC(TKC Corporation)
------------------------------
※当回答は個人的な見解です。間違い等があってもご容赦ください。あくまで自己責任でお願いいたします。 [FirstName] [LastName] Application Developer Utsunomiya, Japan