t_kahi’s blog

KNIMEやCellProfiler、創薬に関する記事と,日々のメモです

【CellProfiler】メタデータを扱う際にUTF-8のBOMでエラーが起きた

CellProfilerで解析をしているときに文字コードエラーで少し悩んだのでメモしておきます.
CellProfilerで画像ファイルとメタデータ(画像ファイルとWell配置,処理条件などが記載されたファイル)を”Metadata”モジュールで紐つけて,実行したところ下記エラーがでました.
f:id:t_kahi:20190821080937p:plain

Encountered unrecoverable error in ExportToSpreadsheet during post-processing: 'ascii' codec can't encode character u'\ufeff' in position 9 : ordinal not in range(128)

プレテストではうまく行っていたのですが,最後の"ExportToSpreadsheet"モジュールで結果が出てこず残念…と思っていたのですが,エラー内容を見ると結果の出力の際に,「'ascii' codec can't encode character u'\ufeff' 」とのことでした.

文字コードとか全く知らないよ…という方(自分)のためのメモです.


"ascii"は文字コードの一つであるASCII(American Standard Code for Information Interchange)のことです.

ASCIIとは、アルファベットや数字、記号などを収録した文字コードの一つ。最も基本的な文字コードとして世界的に普及している。7ビットの整数(0~127)で表現され、ラテンアルファベット(ローマ字)、数字、記号、空白文字、制御文字など128文字を収録している。
ASCII(アスキーコード)とは - IT用語辞典 e-Words

文字コードについて意識していなかったので色々と勉強になりました.
unicodeとは?文字コードとは?UTF-8とは? - Qiita

u"\ufeff"はUTF-8のBOMのユニコード表示のことを意味します.
\ufeffって??? - Qiita

BOMとは、Unicodeで記述された文書の冒頭に記載される短い符号で、使用されている文字符号化方式(文字エンコーディング)の種類や、そのバイト順(エンディアン)を指定するためのもの。
BOM(バイトオーダーマーク)とは - IT用語辞典 e-Words

ASCIIはUTF-8のBOMを認識できないようです.
参考:新人さんに知ってほしい「文字コードのお話」 - Qiita

UTF-8のBOMは他にも問題になることがあるらしい.
UTF-8のBOMにはまった話 - Qiita


ということで,メタデータファイルの形式がおかしいということがわかりました.
実はメタデータファイルはもともと.xlsx形式だったのですが,CellProfilerのメタデータ読み込みは.csvなので,エクセルファイルをCSVに変換したのですが,何も考えずに「CSV UTF-8 (Comma delimited)」を選んでしまったのがすべての原因のようでした.

「Comma Separated Values」で出力したらエラーを出さずに解決しました.
文字コードとかあまり考えずに生きてきたので勉強になりました…基礎大事