8

私はMac Os X 10.5 を使用しています (ただし、10.4 で問題を再現しました)

iconvを使用してUTF-8 ファイルを ASCIIに変換しようとしています

utf-8 ファイルには「éàç」などの文字が含まれています

アクセント付きの文字を最も近い ASCII 文字に変換したい

それで

私のコマンドはこれです:

iconv -f UTF-8 -t ASCII//TRANSLIT//IGNORE myutf8file.txt

Linuxマシンで正常に動作します

しかし、私のローカルMac Os XIでは、たとえばこれを取得します:

è => 'e

à => `a

Mac OS Xでiconvがこの奇妙な出力を返す理由を本当に理解していませんが、Linuxではすべて問題ありません

何か助けはありますか?または道順?

前もって感謝します

4

4 に答える 4

12

問題は、Mac OSX が libiconv と呼ばれる iconv の別の実装を使用していることです。ほとんどの Linux ディストリビューションには、libc の一部である iconv が実装されています。残念ながら、libiconv は ö、è、ñ などの文字を "o、`e、~n に変換します。これを修正する唯一の方法は、ソースをダウンロードし、lib ディレクトリにある translit.h ファイルを変更することです。次のような行を見つけます。 :

2、「」、「お」、

それらを次のようなものに置き換えます。

1、「お」、

この問題に対する答えを見つけようと Google で何時間も費やし、最終的にソースをダウンロードしてハックすることにしました。これが誰かを助けることを願っています!

于 2010-03-27T00:56:23.217 に答える
1

私のニーズに適した回避策を見つけました (明確にするために、スクリプトは文字列を取得し、それを「パーマリンク」URL に変換します。

iconv私の回避策は、出力をsedフィルターにパイプすることです。

echo á é ç this is a test | iconv -f utf8 -t ascii//TRANSLIT | sed 's/[^a-zA-Z 0-9]//g'

上記の OS X Yosemite での結果は次のとおりです。

a e c this is a test
于 2015-06-14T18:00:39.537 に答える
0

別のオプションは、unaccentによってインストールされるものを使用することですbrew install unac

$ unaccent utf-8<<<é
e

unaccent分解された形式の文字は変換しませんが (LATIN SMALL LETTER Eその後に が続くなど)、 を使用して文字を合成された形式に変換COMBINING ACUTE ACCENTできます。uconv

$ unaccent utf-8<<<$'e\u0301'
é
$ uconv -f utf-8 -t utf-8 -x NFC<<<$'e\u0301'|unaccent utf-8
e

brew install icu4c;ln -s /usr/local/opt/icu4c/bin/uconv /usr/local/binインストールしますuconv

于 2016-08-12T19:26:51.840 に答える
0

私の推測では、あなたの Linux マシンではロケールが異なって設定されていると思います... 私が覚えている限りでは、iconv は現在のロケールを使用して UTF-X を変換し、デフォルトでは macos のロケールは "C" に設定されています (明らかに) はアクセントや言語固有の文字を処理しません... iconv を実行する前にこれを試してみてください:

setLocale( LC_ALL, "en_EN");

|K<

于 2009-04-30T14:44:29.573 に答える