[解決済み] .NETで文字列から発音区分符号(アクセント)を削除するにはどうすればよいですか?
2022-03-20 04:23:09
質問
フランス系カナダ人の文字列を変換しようとしているのですが、基本的には、文字を残したまま、文字の中のフランス語のアクセント記号を取ることができればと思っています。(例) 変換する
é
を
e
ということで
crème brûlée
は次のようになります。
creme brulee
)
これを実現するためには、どのような方法があるのでしょうか?
どのように解決するのですか?
私はこの方法を使ったことがないのですが、Michael Kaplanがブログの記事(紛らわしいタイトルですが)で、ダイアクリティクスのストリッピングについて述べているので、その方法を紹介します。 ストリッピングは面白い仕事です(通称 意味のないことの意味について、別名「オール Mn文字はノンスペーシングであるが あるものは、よりノンスペーシングである 他)
static string RemoveDiacritics(string text)
{
var normalizedString = text.Normalize(NormalizationForm.FormD);
var stringBuilder = new StringBuilder(capacity: normalizedString.Length);
for (int i = 0; i < normalizedString.Length; i++)
{
char c = normalizedString[i];
var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
if (unicodeCategory != UnicodeCategory.NonSpacingMark)
{
stringBuilder.Append(c);
}
}
return stringBuilder
.ToString()
.Normalize(NormalizationForm.FormC);
}
なお、これは以前の投稿のフォローアップです。 ダイアクリティクスを除去する...。
このアプローチでは 文字列.正規化 で入力文字列を構成するグリフに分割し (基本的に "基本文字と発音区分けをする)、その結果をスキャンして基本文字だけを保持します。ちょっとだけ複雑ですが、本当に複雑な問題を見ているようです。
もちろん、フランス語に限定するならば、シンプルなテーブルベースのアプローチである C++ std::stringのアクセントとチルダを削除する方法 というのは、@David Dibben が推奨しているからです。
関連
-
[解決済み】WCFとは何か、何ができるのか?
-
[解決済み] Marginのプロパティ順
-
[解決済み] app.configが作成されるタイミングとapp.exe.configが作成されるタイミング、その違いとは?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プラットフォームが同じでも「不正なフォーマットでプログラムを読み込もうとしました。
-
[解決済み] ファイル *.mdf をデータベースとして添付できません。
-
[解決済み] VB.NETでプログラムパスを取得する?
-
[解決済み] EF Coreのadd-migrationのビルドに失敗しました。
-
[解決済み] Microsoft.NETFrameworkとMicrosoft.NETFramework64の違いは何ですか?
-
[解決済み] AndroidでWCFサービスを利用する方法
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み] .NET WebRequestを使用してsharepointにファイルをアップロードすると、409/Conflict HTTPエラーが発生する理由?
-
[解決済み] AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersionの違いは何ですか?
-
[解決済み] WPFの場合、x:Name属性とName属性の違いは何ですか?