結合されたUnicode文字を置き換える

結合されたUnicode文字を置き換える

事前に結合されたUnicode文字を含むファイルがあります。これに関するウィキペディアのページは次のとおりです。"Åström"のような単語があり、この言語のアルファベットにはアクセント記号がありません。削除したいのですが、方法がわかりません。文字をコピーして貼り付けてみましたが(以前は一部では機能していたが結合されていない可能性があります)、期待した結果は出ませんでした。

答え1

あなたÅström分解されたUnicode文字ではありませんあらかじめ作られたそれら:

(現在のロケールがUTF-8を使用し、コマンドラインに入力された文字がここではUTF-8でエンコードされているとします。(UTF-8を使用するブラウザからコピーして貼り付けました。)

$ printf %s Åström | uconv -x any-name
\N{LATIN CAPITAL LETTER A}\N{COMBINING RING ABOVE}\N{LATIN SMALL LETTER S}\N{LATIN SMALL LETTER T}\N{LATIN SMALL LETTER R}\N{LATIN SMALL LETTER O}\N{COMBINING DIAERESIS}\N{LATIN SMALL LETTER M}

参考にしてください上記の発音区別記号と組み合わせた。あらかじめ組み立てられた内容は次のとおりです。

$ printf %s Åström | uconv -x nfkc | uconv -x any-name
\N{LATIN CAPITAL LETTER A WITH RING ABOVE}\N{LATIN SMALL LETTER S}\N{LATIN SMALL LETTER T}\N{LATIN SMALL LETTER R}\N{LATIN SMALL LETTER O WITH DIAERESIS}\N{LATIN SMALL LETTER M}

反対の結合アクセントを使用して事前設定された文字は、iso8859-1またはiso8859-15にあります。したがって、これが意図したターゲット文字セットである場合は、次のことができます。

$ printf %s Åström | uconv -x nfkc -t iso-8859-1

変換可能な文字を変換するには、他の文字と同様に変換してください。

$ printf %s 'Åström й' | uconv -x nfkc | iconv -t iso-8859-5//TRANSLIT
Astrom <0xd9>

(©はiso-8859-5文字セットにあるため、対応する表現(0xd9バイト)に変換されますが、Åまたはöはそうではないため、aAおよびo近似値に変換されます。)

入力に分解された文字(たとえば、および)と事前設定された文字(たとえば)の組み合わせが含まれており、事前設定されたй文字は保持されますが、分解された文字の結合文字を削除したい場合は、次のことができます。

$ printf %s 'Åström й' | uconv -x '[:Nonspacing Mark:]>'
Astrom й

Unicodeには視覚的表現を持つ2つの文字がありますÅ。つまり、U+212B(Ångström) および U+00C5(上に環がある A) です。nfkcU+212BをU+00C5に変換します。

すべての分音符を削除するには、以下を試してください。

$ printf %s Åström | iconv -t us//TRANSLIT
Astrom

(一部の実装では、隣接またはiconv...文字でアクセントを推定できます。)"'

または:

$ printf %s Åström | uconv -x nfd -c -t us
Astrom

(分解、ASCIIに変換、アクセント結合など変換できない文字除去)

または:

$ printf %s Åström | uconv -x "::nfd;[:Nonspacing Mark:]>;"
Astrom

(分解、空白以外のすべての表示を削除)

または:

$ printf %s Åström | uconv -x Latin-ASCII
Astrom

(ラテンアルファベット文字のASCII音訳)。

uconvユーティリティです集中治療室プロジェクト。 Debian とその派生製品はicu-devtoolsパッケージにあります。

答え2

CPANで使用できるPerlモジュールText::Unaccentがあります。

http://search.cpan.org/~ldachary/Text-Unaccent-1.08/Unaccent.pm

サンプルPerlスクリプト(STDINからSTDOUTまで)は次のとおりです。

#!/usr/bin/perl
use Text::Unaccent;
while ($zeile = <STDIN>)
{
   print STDOUT unac_string("UTF-8", $zeile);
}

答え3

私が使った解決策は、Emacsファイルを開き、アクセント付きのセクションを見つけて、アクセント付きの文字とアクセントの前にある文字をコピーすることでした。ファイルの先頭に行って実行しM-x replace-string、コピーしたものを貼り付け、ミニバッファの先頭に行き、前の文字を削除してコマンドを実行します。

アクセントはフリーキャラクターに近いと思って、私が欲しいキャラクターとその以前のキャラクターをコピーして、必ず欲しいものをコピーしました。

関連情報