답변:
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 문자를 빈 문자열로 변환합니다.
제거하지 않고 실제로 라틴 악센트를 강조되지 않은 문자로 변환하려면 다음 질문을 살펴보십시오. 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();
}
이것은 테스트되지 않은 코드입니다.
return new string( source.Where( c => c >= min && c <= max ).ToArray() );
정규식이 필요하지 않습니다. 그냥 인코딩을 사용하십시오 ...
sOutput = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes(sInput));
????nacho??
시도했을 때 얻었습니다 : たまねこnachoなち
모노 3.4에서
주석 블록을 데이터베이스에서 구문 분석하는 데 다음과 같이 약간 변경된 범위가 유용하다는 것을 알았습니다. 이는 CSV 필드를 화나게하는 탭 및 이스케이프 문자와 충돌 할 필요가 없음을 의미합니다.
parsememo = Regex.Replace(parsememo, @"[^\u001F-\u007F]", string.Empty);
다른 특수 문자 나 구두점을 피 하려면 ASCII 표를 확인하십시오 .
나는 확장 ASCII 문자에 대한 해결책을 찾기 위해 여기에 왔지만 찾을 수 없었습니다. 내가 찾은 가장 가까운 것은 bzlm 's solution 입니다. 그러나 그것은 127까지 ASCII 코드에서만 작동합니다 (분명히 코드의 인코딩 유형을 바꿀 수는 있지만 이해하기가 다소 복잡하다고 생각 하므로이 버전을 공유합니다). 여기에 작동하는 솔루션의 확장 된 ASCII 코드는 255 개까지하여 예 는 IS ISO 8859-1
ASCII가 아닌 문자를 찾아서 제거합니다 (255보다 큼)
Dim str1 as String= "â, ??î or ôu🕧� n☁i✑💴++$-💯♓!🇪🚑🌚‼⁉4⃣od;/⏬'®;😁☕😁:☝)😁😁///😍1!@#"
Dim extendedAscii As Encoding = Encoding.GetEncoding("ISO-8859-1",
New EncoderReplacementFallback(String.empty),
New DecoderReplacementFallback())
Dim extendedAsciiBytes() As Byte = extendedAscii.GetBytes(str1)
Dim str2 As String = extendedAscii.GetString(extendedAsciiBytes)
console.WriteLine(str2)
'Output : â, ??î or ôu ni++$-!‼⁉4od;/';:)///1!@#$%^yz:
요구 사항에 따라 인코딩을 교체하고 나머지는 동일하게 유지해야합니다.
이것은 최적의 성능 측면이 아니지만 매우 간단한 Linq 접근 방식입니다.
string strippedString = new string(
yourString.Where(c => c <= sbyte.MaxValue).ToArray()
);
단점은 모든 "생존하는"문자가 먼저 유형의 배열에 삽입 된 char[]
다음 string
생성자가 더 이상 사용하지 않으면 버린다 는 것입니다.
이 정규식을 사용했습니다.
string s = "søme string";
Regex regex = new Regex(@"[^a-zA-Z0-9\s]", (RegexOptions)0);
return regex.Replace(s, "");
이 정규식을 사용하여 파일 이름에서 잘못된 문자를 걸러냅니다.
Regex.Replace(directory, "[^a-zA-Z0-9\\:_\- ]", "")
파일 이름에 허용되는 모든 문자 여야합니다.