문자열에서 비 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 표를 확인하십시오 .