C# 检查字符串是半角还是全角

使用下面的代码将日语字符串从全角转换为半角,但它返回相同的全角字符串而不进行转换。

string userInput = "チヨチヨチチヨチヨチ";
string result = userInput.Normalize(NormalizationForm.FormKC);

预期输出(半角): 实际输出: 全角

然而,即使上面的代码应该将全角字符串转换为半角,当我将半角字符串 (チヨチヨチチヨチヨチ) 传递给上面的代码时,它会将其转换为全角形式 (チヨチヨチチヨチヨチ) 。

我在这里做错了什么?

无论如何,如果我的字符串已经是半角,我不希望执行上面的代码。

如何检查字符串是半角还是全角?


月关宝盒
浏览 248回答 1
1回答

aluckdog

标准化方法按预期工作。它必须将字符转换为标准字符,这样二进制比较才能正确应用。但是,如果您想要始终将全角字符转换为半角字符的自定义转换,则可以创建一个字典来将全角字符映射到半角字符。如果您想确保字符串是半角,那么如果它包含任何全角字符,则会被拒绝。创建一个所有全角字符(拉丁文和日文)的字符串,然后在全角字符串中查找要测试字符串的所有字符。我isHalfWidthString为此目的编写了方法,并添加了全角到半角转换器方法。我认为这可能会有所帮助:  public class FullWidthCharactersHandler    {        static Dictionary<char, char> fullWidth2halfWidthDic;        static FullWidthCharactersHandler()        {            fullWidth2halfWidthDic = new Dictionary<char, char>();            string fullWidthChars = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンッァィゥェォャュョ゙゚ー0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";            string halfWidthChars = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンッァィゥェォャュョ゙゚ー0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";            for (int i = 0; i < fullWidthChars.Length; i++)            {                fullWidth2halfWidthDic.Add(fullWidthChars[i], halfWidthChars[i]);            }        }        public static bool isHalfWidthString(string toTestString)        {            bool isHalfWidth = true;            foreach (char ch in toTestString)            {                if (fullWidth2halfWidthDic.ContainsKey(ch))                {                    isHalfWidth = false;                    break;                }            }            return isHalfWidth;        }        public static string convertFullWidthToHalfWidth(string theString)        {            StringBuilder sbResult = new StringBuilder(theString);            for (int i = 0; i < theString.Length; i++)            {                if (fullWidth2halfWidthDic.ContainsKey(theString[i]))                {                    sbResult[i] = fullWidth2halfWidthDic[theString[i]];                }            }            return sbResult.ToString();        }    }
打开App,查看更多内容
随时随地看视频慕课网APP