[C#] 문자열에서 비 ASCII 문자를 어떻게 제거 할 수 있습니까? (C #에서)

문자열에서 비 ASCII 문자를 어떻게 제거 할 수 있습니까? (C #에서)



답변

string s = "søme string";
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);


답변

정규식을 사용하지 않는 순수한 .NET 솔루션은 다음과 같습니다.

string inputString = "Räksmörgås";
string asAscii = Encoding.ASCII.GetString(
    Encoding.Convert(
        Encoding.UTF8,
        Encoding.GetEncoding(
            Encoding.ASCII.EncodingName,
            new EncoderReplacementFallback(string.Empty),
            new DecoderExceptionFallback()
            ),
        Encoding.UTF8.GetBytes(inputString)
    )
);

번거로울 수 있지만 직관적이어야합니다. .NET ASCII 인코딩을 사용하여 문자열을 변환합니다. UTF8은 원래 문자를 나타낼 수 있으므로 변환 중에 사용됩니다. EncoderReplacementFallback을 사용하여 비 ASCII 문자를 빈 문자열로 변환합니다.


답변

MonsCamus의 의미는 다음과 같습니다.

parsememo = Regex.Replace(parsememo, @"[^\u0020-\u007E]", string.Empty);


답변

제거하지 않고 실제로 라틴 악센트를 강조되지 않은 문자로 변환하려면 다음 질문을 살펴보십시오. 8 비트 문자를 7 비트 문자로 어떻게 변환합니까? (예 : U에서 U로)


답변

필 크루즈의 정규 표현식 솔루션 에서 영감을 얻어 순수한 LINQ 솔루션을 만들었습니다.

public static string PureAscii(this string source, char nil = ' ')
{
    var min = '\u0000';
    var max = '\u007F';
    return source.Select(c => c < min ? nil : c > max ? nil : c).ToText();
}

public static string ToText(this IEnumerable<char> source)
{
    var buffer = new StringBuilder();
    foreach (var c in source)
        buffer.Append(c);
    return buffer.ToString();
}

이것은 테스트되지 않은 코드입니다.


답변

정규식이 필요하지 않습니다. 그냥 인코딩을 사용하십시오 …

sOutput = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes(sInput));


답변

주석 블록을 데이터베이스에서 구문 분석하는 데 다음과 같이 약간 변경된 범위가 유용하다는 것을 알았습니다. 이는 CSV 필드를 화나게하는 탭 및 이스케이프 문자와 충돌 할 필요가 없음을 의미합니다.

parsememo = Regex.Replace(parsememo, @"[^\u001F-\u007F]", string.Empty);

다른 특수 문자 나 구두점을 피 하려면 ASCII 표를 확인하십시오 .