bestsource

문자열에 유니코드 문자가 포함되어 있는지 확인하는 방법은 무엇입니까?

bestsource 2023. 8. 27. 09:43
반응형

문자열에 유니코드 문자가 포함되어 있는지 확인하는 방법은 무엇입니까?

제가 문자열을 가지고 있는데 안에 유니코드 문자가 있는지 알고 싶습니다.(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.UnicodeASCII와 동일한 범위에서 중복되도록 명시적으로 정의됩니다.따라서 문자열에 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);
}

일반적으로 다음과 같은 작업을 수행해야 할 때 다양한 유니코드 인코딩에 대해 걱정해야 합니다.

  1. 특정 인코딩을 사용하여 문자열을 바이트 스트림으로 인코딩합니다.
  2. 특정 인코딩을 사용하여 바이트 스트림에서 문자열을 디코딩합니다.

그러나 문자열 랜드에 들어가면 문자열이 원래 표시된 인코딩은 관계가 없습니다.

문자열의 각 문자는 유니코드 코드 포인트 또는 유니코드 문자의 순서(숫자) 값이라고도 하는 유니코드 스칼라 값으로 정의됩니다.각 코드 포인트는 UTF-16 인코딩을 사용하여 인코딩되며, 인코딩의 각 요소의 숫자 값은 Char 개체로 표시됩니다.

다음과 같은 질문도 관련이 있을 수 있습니다.

ASC가 아닌 것을 어떻게 벗을 수 있습니까?문자열의 문자?(C#)

C# 문자열에 ASCII만 포함되는지 확인

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

반응형