Files
JRCookbook/JRCookbookBusiness/clsDiacriticRemover.cs
2026-03-07 19:22:22 -06:00

377 lines
16 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JRCookbookBusiness
{
public static class clsDiacriticRemover
{
private static Char[] mc_Convert;
/// <summary>
/// This function is ultra fast because it uses a lookup table.
/// This function does not depend on Windows functionality. It also works on Linux.
/// This function removes all diacritics, accents, etc.
/// For example "Crème Brûlée mit Soße" is converted to "Creme Brulee mit Sosse".
/// </summary>
public static String RemoveDiacritics(String s_Text)
{
StringBuilder i_Out = new StringBuilder(s_Text.Length);
foreach (Char c_Char in s_Text)
{
/* This switch statement is optional!
switch (c_Char)
{
// If you like you can add your own conversions, like here for German.
// Otherwise remove this switch and 'ä' will be translated to 'a', etc.
case 'ä': i_Out.Append("ae"); continue;
case 'ö': i_Out.Append("oe"); continue;
case 'ü': i_Out.Append("ue"); continue;
case 'Ä': i_Out.Append("Ae"); continue;
case 'Ö': i_Out.Append("Oe"); continue;
case 'Ü': i_Out.Append("Ue"); continue;
case 'ß': i_Out.Append("ss"); continue;
} */
if (c_Char < mc_Convert.Length)
i_Out.Append(mc_Convert[c_Char]);
else
i_Out.Append(c_Char);
}
return i_Out.ToString();
}
// static constructor
// See https://www.compart.com/en/unicode/U+0180
static clsDiacriticRemover()
{
mc_Convert = new Char[0x270];
// Fill char array with translation of each character to itself
for (int i = 0; i < 0x270; i++)
{
mc_Convert[i] = (Char)i;
}
// Store the replacements for 310 special characters
#region Fill mc_Convert
mc_Convert[0x0C0] = 'A'; // À
mc_Convert[0x0C1] = 'A'; // Á
mc_Convert[0x0C2] = 'A'; // Â
mc_Convert[0x0C3] = 'A'; // Ã
mc_Convert[0x0C4] = 'A'; // Ä
mc_Convert[0x0C5] = 'A'; // Å
mc_Convert[0x0C6] = 'A'; // Æ
mc_Convert[0x0C7] = 'C'; // Ç
mc_Convert[0x0C8] = 'E'; // È
mc_Convert[0x0C9] = 'E'; // É
mc_Convert[0x0CA] = 'E'; // Ê
mc_Convert[0x0CB] = 'E'; // Ë
mc_Convert[0x0CC] = 'I'; // Ì
mc_Convert[0x0CD] = 'I'; // Í
mc_Convert[0x0CE] = 'I'; // Î
mc_Convert[0x0CF] = 'I'; // Ï
mc_Convert[0x0D0] = 'D'; // Ð
mc_Convert[0x0D1] = 'N'; // Ñ
mc_Convert[0x0D2] = 'O'; // Ò
mc_Convert[0x0D3] = 'O'; // Ó
mc_Convert[0x0D4] = 'O'; // Ô
mc_Convert[0x0D5] = 'O'; // Õ
mc_Convert[0x0D6] = 'O'; // Ö
mc_Convert[0x0D8] = 'O'; // Ø
mc_Convert[0x0D9] = 'U'; // Ù
mc_Convert[0x0DA] = 'U'; // Ú
mc_Convert[0x0DB] = 'U'; // Û
mc_Convert[0x0DC] = 'U'; // Ü
mc_Convert[0x0DD] = 'Y'; // Ý
mc_Convert[0x0DF] = 's'; // ß
mc_Convert[0x0E0] = 'a'; // à
mc_Convert[0x0E1] = 'a'; // á
mc_Convert[0x0E2] = 'a'; // â
mc_Convert[0x0E3] = 'a'; // ã
mc_Convert[0x0E4] = 'a'; // ä
mc_Convert[0x0E5] = 'a'; // å
mc_Convert[0x0E6] = 'a'; // æ
mc_Convert[0x0E7] = 'c'; // ç
mc_Convert[0x0E8] = 'e'; // è
mc_Convert[0x0E9] = 'e'; // é
mc_Convert[0x0EA] = 'e'; // ê
mc_Convert[0x0EB] = 'e'; // ë
mc_Convert[0x0EC] = 'i'; // ì
mc_Convert[0x0ED] = 'i'; // í
mc_Convert[0x0EE] = 'i'; // î
mc_Convert[0x0EF] = 'i'; // ï
mc_Convert[0x0F1] = 'n'; // ñ
mc_Convert[0x0F2] = 'o'; // ò
mc_Convert[0x0F3] = 'o'; // ó
mc_Convert[0x0F4] = 'o'; // ô
mc_Convert[0x0F5] = 'o'; // õ
mc_Convert[0x0F6] = 'o'; // ö
mc_Convert[0x0F8] = 'o'; // ø
mc_Convert[0x0F9] = 'u'; // ù
mc_Convert[0x0FA] = 'u'; // ú
mc_Convert[0x0FB] = 'u'; // û
mc_Convert[0x0FC] = 'u'; // ü
mc_Convert[0x0FD] = 'y'; // ý
mc_Convert[0x0FF] = 'y'; // ÿ
mc_Convert[0x100] = 'A'; // Ā
mc_Convert[0x101] = 'a'; // ā
mc_Convert[0x102] = 'A'; // Ă
mc_Convert[0x103] = 'a'; // ă
mc_Convert[0x104] = 'A'; // Ą
mc_Convert[0x105] = 'a'; // ą
mc_Convert[0x106] = 'C'; // Ć
mc_Convert[0x107] = 'c'; // ć
mc_Convert[0x108] = 'C'; // Ĉ
mc_Convert[0x109] = 'c'; // ĉ
mc_Convert[0x10A] = 'C'; // Ċ
mc_Convert[0x10B] = 'c'; // ċ
mc_Convert[0x10C] = 'C'; // Č
mc_Convert[0x10D] = 'c'; // č
mc_Convert[0x10E] = 'D'; // Ď
mc_Convert[0x10F] = 'd'; // ď
mc_Convert[0x110] = 'D'; // Đ
mc_Convert[0x111] = 'd'; // đ
mc_Convert[0x112] = 'E'; // Ē
mc_Convert[0x113] = 'e'; // ē
mc_Convert[0x114] = 'E'; // Ĕ
mc_Convert[0x115] = 'e'; // ĕ
mc_Convert[0x116] = 'E'; // Ė
mc_Convert[0x117] = 'e'; // ė
mc_Convert[0x118] = 'E'; // Ę
mc_Convert[0x119] = 'e'; // ę
mc_Convert[0x11A] = 'E'; // Ě
mc_Convert[0x11B] = 'e'; // ě
mc_Convert[0x11C] = 'G'; // Ĝ
mc_Convert[0x11D] = 'g'; // ĝ
mc_Convert[0x11E] = 'G'; // Ğ
mc_Convert[0x11F] = 'g'; // ğ
mc_Convert[0x120] = 'G'; // Ġ
mc_Convert[0x121] = 'g'; // ġ
mc_Convert[0x122] = 'G'; // Ģ
mc_Convert[0x123] = 'g'; // ģ
mc_Convert[0x124] = 'H'; // Ĥ
mc_Convert[0x125] = 'h'; // ĥ
mc_Convert[0x126] = 'H'; // Ħ
mc_Convert[0x127] = 'h'; // ħ
mc_Convert[0x128] = 'I'; // Ĩ
mc_Convert[0x129] = 'i'; // ĩ
mc_Convert[0x12A] = 'I'; // Ī
mc_Convert[0x12B] = 'i'; // ī
mc_Convert[0x12C] = 'I'; // Ĭ
mc_Convert[0x12D] = 'i'; // ĭ
mc_Convert[0x12E] = 'I'; // Į
mc_Convert[0x12F] = 'i'; // į
mc_Convert[0x130] = 'I'; // İ
mc_Convert[0x131] = 'i'; // ı
mc_Convert[0x134] = 'J'; // Ĵ
mc_Convert[0x135] = 'j'; // ĵ
mc_Convert[0x136] = 'K'; // Ķ
mc_Convert[0x137] = 'k'; // ķ
mc_Convert[0x138] = 'K'; // ĸ
mc_Convert[0x139] = 'L'; // Ĺ
mc_Convert[0x13A] = 'l'; // ĺ
mc_Convert[0x13B] = 'L'; // Ļ
mc_Convert[0x13C] = 'l'; // ļ
mc_Convert[0x13D] = 'L'; // Ľ
mc_Convert[0x13E] = 'l'; // ľ
mc_Convert[0x13F] = 'L'; // Ŀ
mc_Convert[0x140] = 'l'; // ŀ
mc_Convert[0x141] = 'L'; // Ł
mc_Convert[0x142] = 'l'; // ł
mc_Convert[0x143] = 'N'; // Ń
mc_Convert[0x144] = 'n'; // ń
mc_Convert[0x145] = 'N'; // Ņ
mc_Convert[0x146] = 'n'; // ņ
mc_Convert[0x147] = 'N'; // Ň
mc_Convert[0x148] = 'n'; // ň
mc_Convert[0x149] = 'n'; // ʼn
mc_Convert[0x14C] = 'O'; // Ō
mc_Convert[0x14D] = 'o'; // ō
mc_Convert[0x14E] = 'O'; // Ŏ
mc_Convert[0x14F] = 'o'; // ŏ
mc_Convert[0x150] = 'O'; // Ő
mc_Convert[0x151] = 'o'; // ő
mc_Convert[0x152] = 'O'; // Œ
mc_Convert[0x153] = 'o'; // œ
mc_Convert[0x154] = 'R'; // Ŕ
mc_Convert[0x155] = 'r'; // ŕ
mc_Convert[0x156] = 'R'; // Ŗ
mc_Convert[0x157] = 'r'; // ŗ
mc_Convert[0x158] = 'R'; // Ř
mc_Convert[0x159] = 'r'; // ř
mc_Convert[0x15A] = 'S'; // Ś
mc_Convert[0x15B] = 's'; // ś
mc_Convert[0x15C] = 'S'; // Ŝ
mc_Convert[0x15D] = 's'; // ŝ
mc_Convert[0x15E] = 'S'; // Ş
mc_Convert[0x15F] = 's'; // ş
mc_Convert[0x160] = 'S'; // Š
mc_Convert[0x161] = 's'; // š
mc_Convert[0x162] = 'T'; // Ţ
mc_Convert[0x163] = 't'; // ţ
mc_Convert[0x164] = 'T'; // Ť
mc_Convert[0x165] = 't'; // ť
mc_Convert[0x166] = 'T'; // Ŧ
mc_Convert[0x167] = 't'; // ŧ
mc_Convert[0x168] = 'U'; // Ũ
mc_Convert[0x169] = 'u'; // ũ
mc_Convert[0x16A] = 'U'; // Ū
mc_Convert[0x16B] = 'u'; // ū
mc_Convert[0x16C] = 'U'; // Ŭ
mc_Convert[0x16D] = 'u'; // ŭ
mc_Convert[0x16E] = 'U'; // Ů
mc_Convert[0x16F] = 'u'; // ů
mc_Convert[0x170] = 'U'; // Ű
mc_Convert[0x171] = 'u'; // ű
mc_Convert[0x172] = 'U'; // Ų
mc_Convert[0x173] = 'u'; // ų
mc_Convert[0x174] = 'W'; // Ŵ
mc_Convert[0x175] = 'w'; // ŵ
mc_Convert[0x176] = 'Y'; // Ŷ
mc_Convert[0x177] = 'y'; // ŷ
mc_Convert[0x178] = 'Y'; // Ÿ
mc_Convert[0x179] = 'Z'; // Ź
mc_Convert[0x17A] = 'z'; // ź
mc_Convert[0x17B] = 'Z'; // Ż
mc_Convert[0x17C] = 'z'; // ż
mc_Convert[0x17D] = 'Z'; // Ž
mc_Convert[0x17E] = 'z'; // ž
mc_Convert[0x180] = 'b'; // ƀ
mc_Convert[0x189] = 'D'; // Ɖ
mc_Convert[0x191] = 'F'; // Ƒ
mc_Convert[0x192] = 'f'; // ƒ
mc_Convert[0x193] = 'G'; // Ɠ
mc_Convert[0x197] = 'I'; // Ɨ
mc_Convert[0x198] = 'K'; // Ƙ
mc_Convert[0x199] = 'k'; // ƙ
mc_Convert[0x19A] = 'l'; // ƚ
mc_Convert[0x19F] = 'O'; // Ɵ
mc_Convert[0x1A0] = 'O'; // Ơ
mc_Convert[0x1A1] = 'o'; // ơ
mc_Convert[0x1AB] = 't'; // ƫ
mc_Convert[0x1AC] = 'T'; // Ƭ
mc_Convert[0x1AD] = 't'; // ƭ
mc_Convert[0x1AE] = 'T'; // Ʈ
mc_Convert[0x1AF] = 'U'; // Ư
mc_Convert[0x1B0] = 'u'; // ư
mc_Convert[0x1B6] = 'z'; // ƶ
mc_Convert[0x1CD] = 'A'; // Ǎ
mc_Convert[0x1CE] = 'a'; // ǎ
mc_Convert[0x1CF] = 'I'; // Ǐ
mc_Convert[0x1D0] = 'i'; // ǐ
mc_Convert[0x1D1] = 'O'; // Ǒ
mc_Convert[0x1D2] = 'o'; // ǒ
mc_Convert[0x1D3] = 'U'; // Ǔ
mc_Convert[0x1D4] = 'u'; // ǔ
mc_Convert[0x1D5] = 'U'; // Ǖ
mc_Convert[0x1D6] = 'u'; // ǖ
mc_Convert[0x1D7] = 'U'; // Ǘ
mc_Convert[0x1D8] = 'u'; // ǘ
mc_Convert[0x1D9] = 'U'; // Ǚ
mc_Convert[0x1DA] = 'u'; // ǚ
mc_Convert[0x1DB] = 'U'; // Ǜ
mc_Convert[0x1DC] = 'u'; // ǜ
mc_Convert[0x1DE] = 'A'; // Ǟ
mc_Convert[0x1DF] = 'a'; // ǟ
mc_Convert[0x1E0] = 'A'; // Ǡ
mc_Convert[0x1E1] = 'a'; // ǡ
mc_Convert[0x1E2] = 'A'; // Ǣ
mc_Convert[0x1E3] = 'a'; // ǣ
mc_Convert[0x1E4] = 'G'; // Ǥ
mc_Convert[0x1E5] = 'g'; // ǥ
mc_Convert[0x1E6] = 'G'; // Ǧ
mc_Convert[0x1E7] = 'g'; // ǧ
mc_Convert[0x1E8] = 'K'; // Ǩ
mc_Convert[0x1E9] = 'k'; // ǩ
mc_Convert[0x1EA] = 'O'; // Ǫ
mc_Convert[0x1EB] = 'o'; // ǫ
mc_Convert[0x1EC] = 'O'; // Ǭ
mc_Convert[0x1ED] = 'o'; // ǭ
mc_Convert[0x1F0] = 'j'; // ǰ
mc_Convert[0x1F4] = 'G'; // Ǵ
mc_Convert[0x1F5] = 'g'; // ǵ
mc_Convert[0x1F8] = 'N'; // Ǹ
mc_Convert[0x1F9] = 'n'; // ǹ
mc_Convert[0x1FA] = 'A'; // Ǻ
mc_Convert[0x1FB] = 'a'; // ǻ
mc_Convert[0x1FC] = 'A'; // Ǽ
mc_Convert[0x1FD] = 'a'; // ǽ
mc_Convert[0x1FE] = 'O'; // Ǿ
mc_Convert[0x1FF] = 'o'; // ǿ
mc_Convert[0x200] = 'A'; // Ȁ
mc_Convert[0x201] = 'a'; // ȁ
mc_Convert[0x202] = 'A'; // Ȃ
mc_Convert[0x203] = 'A'; // ȃ
mc_Convert[0x204] = 'E'; // Ȅ
mc_Convert[0x205] = 'e'; // ȅ
mc_Convert[0x206] = 'E'; // Ȇ
mc_Convert[0x207] = 'e'; // ȇ
mc_Convert[0x208] = 'I'; // Ȉ
mc_Convert[0x209] = 'i'; // ȉ
mc_Convert[0x20A] = 'I'; // Ȋ
mc_Convert[0x20B] = 'i'; // ȋ
mc_Convert[0x20C] = 'O'; // Ȍ
mc_Convert[0x20D] = 'o'; // ȍ
mc_Convert[0x20E] = 'O'; // Ȏ
mc_Convert[0x20F] = 'o'; // ȏ
mc_Convert[0x210] = 'R'; // Ȑ
mc_Convert[0x211] = 'r'; // ȑ
mc_Convert[0x212] = 'R'; // Ȓ
mc_Convert[0x213] = 'r'; // ȓ
mc_Convert[0x214] = 'U'; // Ȕ
mc_Convert[0x215] = 'u'; // ȕ
mc_Convert[0x216] = 'U'; // Ȗ
mc_Convert[0x217] = 'u'; // ȗ
mc_Convert[0x218] = 'S'; // Ș
mc_Convert[0x219] = 's'; // ș
mc_Convert[0x21A] = 'T'; // Ț
mc_Convert[0x21B] = 't'; // ț
mc_Convert[0x21E] = 'H'; // Ȟ
mc_Convert[0x21F] = 'h'; // ȟ
mc_Convert[0x224] = 'Z'; // Ȥ
mc_Convert[0x225] = 'z'; // ȥ
mc_Convert[0x226] = 'A'; // Ȧ
mc_Convert[0x227] = 'a'; // ȧ
mc_Convert[0x228] = 'E'; // Ȩ
mc_Convert[0x229] = 'e'; // ȩ
mc_Convert[0x22A] = 'O'; // Ȫ
mc_Convert[0x22B] = 'o'; // ȫ
mc_Convert[0x22C] = 'O'; // Ȭ
mc_Convert[0x22D] = 'o'; // ȭ
mc_Convert[0x22E] = 'O'; // Ȯ
mc_Convert[0x22F] = 'o'; // ȯ
mc_Convert[0x230] = 'O'; // Ȱ
mc_Convert[0x231] = 'o'; // ȱ
mc_Convert[0x232] = 'Y'; // Ȳ
mc_Convert[0x233] = 'y'; // ȳ
mc_Convert[0x234] = 'l'; // ȴ
mc_Convert[0x235] = 'n'; // ȵ
mc_Convert[0x23A] = 'A'; // Ⱥ
mc_Convert[0x23B] = 'C'; // Ȼ
mc_Convert[0x23C] = 'c'; // ȼ
mc_Convert[0x23D] = 'L'; // Ƚ
mc_Convert[0x23E] = 'T'; // Ⱦ
mc_Convert[0x23F] = 's'; // ȿ
mc_Convert[0x240] = 'z'; // ɀ
mc_Convert[0x243] = 'B'; // Ƀ
mc_Convert[0x244] = 'U'; // Ʉ
mc_Convert[0x246] = 'E'; // Ɇ
mc_Convert[0x247] = 'e'; // ɇ
mc_Convert[0x248] = 'J'; // Ɉ
mc_Convert[0x249] = 'j'; // ɉ
mc_Convert[0x24C] = 'R'; // Ɍ
mc_Convert[0x24D] = 'r'; // ɍ
mc_Convert[0x24E] = 'Y'; // Ɏ
mc_Convert[0x24F] = 'y'; // ɏ
mc_Convert[0x261] = 'g'; // ɡ
#endregion
}
}
}