문자열에 유니코드 문자가 포함되어 있는지 확인하는 방법은 무엇입니까?
제가 문자열을 가지고 있는데 안에 유니코드 문자가 있는지 알고 싶습니다.(ASCII가 완전히 포함되어 있는지 여부)
어떻게 하면 그것을 달성할 수 있을까요?
감사합니다!
내 추측이 맞다면 문자열에 "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);
}
갱신하다
확장 ASCII가 감지됩니다.실제 ASCII 문자 범위(최대 127자)만 감지하는 경우 유니코드를 나타내지 않는 확장 ASCII 문자에 대해 잘못된 긍정을 얻을 수 있습니다.저는 제 샘플에서 이것을 언급했습니다.
문자열에 ASCII 문자만 포함된 경우 ASCII 인코딩을 사용하는 직렬화 + 역직렬화 단계는 동일한 문자열을 가져와 c#의 한 라이너 체크인이 다음과 같이 보일 수 있습니다.
String s1="testभारत";
bool isUnicode= System.Text.ASCIIEncoding.GetEncoding(0).GetString(System.Text.ASCIIEncoding.GetEncoding(0).GetBytes(s1)) != s1;
ASCII
범위에 있는 문자 코드만 정의합니다.0-127
.Unicode
ASCII와 동일한 범위에서 중복되도록 명시적으로 정의됩니다.따라서 문자열에 127자보다 큰 문자 코드가 포함되어 있으면 문자열에 ASCII 문자가 아닌 유니코드 문자가 포함되어 있습니다.
ASCII에는 영어 알파벳만 포함됩니다.따라서 어떤 이유로든 악센트가 있는 문자(예: 스페인어 텍스트)를 포함할 수 있는 문자열에 동일한 접근 방식을 적용해야 하는 경우 ASCII로는 충분하지 않으므로 다른 식별자를 찾아야 합니다.
ANSI
문자 집합 [*]은(는) 앞서 언급한 강세가 있는 라틴 문자로 ASCII 문자를 확장합니다.128-255
그러나 유니코드는 해당 범위에서 ANSI와 겹치지 않으므로 기술적으로 유니코드 문자열은 ANSI의 일부는 아니지만 동일한 문자 코드(특히 범위 내)를 가진 문자를 포함할 수 있습니다.128-159
링크한 표에서 알 수 있듯이).
이를 위한 실제 코드에 대해서는, @chibacity 답변이 작동해야 하지만, ANSI에서는 작동하지 않기 때문에 엄격한 ASCII를 다루도록 수정해야 합니다.
[*] Latin 1 Windows(Win-1252)라고도 함
문자를 포함하는 경우 유니코드 문자를 포함합니다.
시작:
텍스트를 일련의 유니코드 문자로 나타냅니다.
public static bool ContainsUnicodeChars(string text)
{
return !string.IsNullOrEmpty(text);
}
일반적으로 다음과 같은 작업을 수행해야 할 때 다양한 유니코드 인코딩에 대해 걱정해야 합니다.
- 특정 인코딩을 사용하여 문자열을 바이트 스트림으로 인코딩합니다.
- 특정 인코딩을 사용하여 바이트 스트림에서 문자열을 디코딩합니다.
그러나 문자열 랜드에 들어가면 문자열이 원래 표시된 인코딩은 관계가 없습니다.
문자열의 각 문자는 유니코드 코드 포인트 또는 유니코드 문자의 순서(숫자) 값이라고도 하는 유니코드 스칼라 값으로 정의됩니다.각 코드 포인트는 UTF-16 인코딩을 사용하여 인코딩되며, 인코딩의 각 요소의 숫자 값은 Char 개체로 표시됩니다.
다음과 같은 질문도 관련이 있을 수 있습니다.
ASC가 아닌 것을 어떻게 벗을 수 있습니까?문자열의 문자?(C#)
Jon Skeet의 이 기사는 유니코드와 .NET입니다.
람다 식을 사용하지 않는 또 다른 솔루션입니다.VB에 있습니다.NET이지만 C#:로 쉽게 변환할 수 있습니다.
Public Function ContainsUnicode(ByVal inputstr As String) As Boolean
Dim inputCharArray() As Char = inputstr.ToCharArray
For i As Integer = 0 To inputCharArray.Length - 1
If CInt(AscW(inputCharArray(i))) > 255 Then Return True
Next
Return False
End Function
언급URL : https://stackoverflow.com/questions/4459571/how-to-recognize-if-a-string-contains-unicode-chars
'bestsource' 카테고리의 다른 글
대용량 이진 데이터를 위해 MySQL 5.6 LONGBLOB를 구성하는 방법 (0) | 2023.08.27 |
---|---|
에뮬레이터: 오류: x86 에뮬레이션에는 현재 하드웨어 가속이 필요합니다. (0) | 2023.08.27 |
jquery 3.0 url.indexOf 오류 (0) | 2023.08.27 |
ID가 'xxx'인 업데이트 패널을 찾을 수 없습니다.동적으로 업데이트되는 경우 다른 업데이트 패널 내부에 있어야 합니다. (0) | 2023.08.27 |
jQuery로 인증을 위한 AJAX 호출 암호화가 가능합니까? (0) | 2023.08.27 |