Him*_*ack 34 c# asp.net unicode
我有一个字符串,我想知道它内部是否有unicode字符.(如果它完全包含ASCII或不包含ASCII)
我怎样才能做到这一点?
谢谢!
Tim*_*oyd 63
如果我的假设是正确的,您希望知道您的字符串是否包含任何"非ANSI"字符.您可以如下推导出这个.
public void test()
{
const string WithUnicodeCharacter = "a hebrew character:\uFB2F";
const string WithoutUnicodeCharacter = "an ANSI character:Æ";
bool hasUnicode;
//true
hasUnicode = ContainsUnicodeCharacter(WithUnicodeCharacter);
Console.WriteLine(hasUnicode);
//false
hasUnicode = ContainsUnicodeCharacter(WithoutUnicodeCharacter);
Console.WriteLine(hasUnicode);
}
public bool ContainsUnicodeCharacter(string input)
{
const int MaxAnsiCode = 255;
return input.Any(c => c > MaxAnsiCode);
}
Run Code Online (Sandbox Code Playgroud)
更新
这将检测扩展的ASCII.如果您只检测真正的ASCII字符范围(最多127个),那么您可能会获得不表示Unicode的扩展ASCII字符的误报.我在我的样本中提到了这一点.
zin*_*ngh 11
如果一个字符串只包含ASCII字符,那么使用ASCII编码的序列化+反序列化步骤应该返回相同的字符串,因此c#中的单行检查可能看起来像..
String s1="test????";
bool isUnicode= System.Text.ASCIIEncoding.GetEncoding(0).GetString(System.Text.ASCIIEncoding.GetEncoding(0).GetBytes(s1)) != s1;
Run Code Online (Sandbox Code Playgroud)
ASCII仅定义范围中的字符代码0-127.Unicode明确定义,例如在ASCII的相同范围内重叠.因此,如果你看一下在你的字符串中的字符代码,它包含任何东西比127更高,该字符串包含非ASCII字符的Unicode字符.
注意,ASCII仅包括英文字母.因此,如果您(出于某种原因)需要将相同的方法应用于可能包含重音字符的字符串(例如西班牙语文本),则ASCII不够,您需要寻找另一个区分因素.
ANSI字符集[*]确实扩展了ASCII字符,并在范围内使用上述重音拉丁字符128-255.但是,Unicode在该范围内不与ANSI重叠,因此从技术上讲,Unicode字符串可能包含不属于ANSI的字符,但具有相同的字符代码(特别是在范围内128-159,您可以从我链接的表中看到) .
至于执行此操作的实际代码,@ machib应答应该有效,尽管您应该修改它以涵盖严格的ASCII,因为它不适用于ANSI.
[*]也称为Latin 1 Windows(Win-1252)
| 归档时间: |
|
| 查看次数: |
65818 次 |
| 最近记录: |