C#:用另一个键盘布局中的字母替换随机字母

C#: Replace random letters with letters from another keyboard layout

抱歉我的英语不好。所以,我有一个代码。

    public Random rnd = new Random();

    public string RandomizeLetters(string text)
    {
        string variations = "";

        foreach (var letter in text)
        {
            var а = new List<string> { "а", "аa" };
            var е = new List<string> { "е", "еe" };
            var о = new List<string> { "о", "оo" };
            var р = new List<string> { "р", "рp" };
            var с = new List<string> { "с", "сc" };
            var у = new List<string> { "у", "уy" };
            var х = new List<string> { "х", "хx" };

            var alphavite = new List<List<string>> { а, е, о, р, с, у, х };

            var res = new StringBuilder();

            foreach (var x in alphavite)
            {
                if (x.Exists(e => e.EndsWith(letter.ToString())))
                {
                    res.Append(x[1][rnd.Next(0, x[1].Length)]);
                }
            }

            res.Append(letter.ToString());

            variations += res;
        }

        return variations.ToString();
    }

此代码将随机字母替换为视觉上类似于来自不同键盘布局的字母的字母,在我的例子中,从俄语键盘布局到英语键盘布局。 但是我得到的不是预期的结果,而是包含重复字符的文本。

这是我要处理的文本:

Для проверки наличия в вашем тексте символов из другого языка - скопируйте исходный текст, вставьте его в поле ниже, и выберите нужный чекбокс языка

但是我在输出中得到的文本:

Для пpроовeеpрки нaаличия в ваашeем теекcстeе cсимвоолоов из дрруугоогоо языкaа - сскоопиpрууйтее иcсxхoодный теекcст, всстaавьтее eегoо в поолeе нижее, и выбeеpритeе нyужный чеекбоокcс языкаа

如何解决?我在检查字符的服务的帮助下检查文本:raskladka.obmen-service.com

即使您稍后将字母替换为 res.Append(x[1][rnd.Next(0, x[1].Length)]);,您仍然会附加基本字母:res.Append(letter.ToString()); 尝试添加条件:

        bool replaced = false;
        foreach (var x in alphavite)
        {
            if (x.Exists(e => e.EndsWith(letter.ToString())))
            {
                res.Append(x[1][rnd.Next(0, x[1].Length)]);
                replaced = true;
            }
        }
        if(!replaced)
            res.Append(letter.ToString());

也许您应该将英文字母替换为 Unicode 字符集中看起来相似的西里尔字母,例如:

    var а = new List<string> { 'а', '\u0430' };
    var а = new List<string> { 'p', '\u0440' };
    var а = new List<string> { 'y', '\u0443' };