5

File.read()Unicode 文字を含むファイル ( ) を読み取る Ruby スクリプトを作成しましたが、コマンド ラインから正常に動作します。

ただし、Automator ワークフロー (Mac OS X) に入れようとすると、このエラーが発生します。

2009-12-23 17:55:15 -0500: /Users/jeffreyaylesworth/bin/symbols:19:in `split': invalid byte sequence in US-ASCII (ArgumentError)
(traceback)

そのため、Automator から実行すると、split は突然非 ASCII 文字を好まなくなります。私が知る限り、どちらも同じバージョンの Ruby から実行されています (バージョン番号は同じです)。

なぜ彼らが違う振る舞いをしているのかについてはあまり心配していませんが(誰かが知っているなら、それは素晴らしいことです)、分割が非ASCII文字を受け入れるようにする解決策が欲しいです。

それが役立つ場合は、1 文字のテキストを 2 つの部分に分割する必要があるため、C のトークナイザーに似たものが機能する場合は、それを使用できます。

4

2 に答える 2

7

ファイルのエンコーディングを指定しません。ファイルのエンコーディングを自動的に確実に決定することは不可能であるため、エンコーディングを明示的に指定する必要があります。そうでない場合は、外部エンコーディングが使用されます。設定されていない場合は、環境で指定されたエンコーディングが使用され、環境でエンコーディングが指定されていない場合、ファイルは 7 であると想定されます。ビット US-ASCII。

あなたの場合、2 つの環境 (自動化されたスクリプトは、ロケール設定なしで非常に制限された環境で実行されることが多い) またはインタープリターが呼び出される方法に違いがあるようです。

したがって、次のようなことをする必要があります

File.read('/path/to/file', encoding: 'UTF-8')
于 2009-12-24T00:09:43.830 に答える
1

2 つが異なる環境から実行されているように聞こえます - 異なる LOCALE 値で。

于 2009-12-23T23:47:33.007 に答える