我有一个扩展名为ASCII char的字符串,我试图将其删除。如何在字符串中找到它并从字符串中删除它:1ÿ1ÿ0ÿÿÿ
?
字节数组,缓冲区= {49,0,255,255,49,0,255,255,48,0,255,255,255,255}
我正在使用C#,字符串是由字节数组形成的,如下所示:temp.Add(System.Text.Encoding.ASCII.GetString(buffer));
然后,temp中的第一项是"1\0??1\0??0\0????"
我想从字符串中删除非ASCII值,或者更好的是缓冲区。
答案 0 :(得分:2)
使用字符串中的所有非ASCII字符:
哪里'?'是你的替代品。
var clean = new string("1ÿ1ÿ0ÿÿÿ".Select(c => c > 127 ? '?' : c).ToArray());
或
var clean = new string("1ÿ1ÿ0ÿÿÿ".Where(c => c <= 127).ToArray());
如果你想删除字符。
<强>更新强>
为了响应您的更新,您可以从缓冲区中删除非ascii字符以创建字符串,如下所示:
string clean = new string(buffer.Where(b => b <= 127).Select(b => (char)b).ToArray());
答案 1 :(得分:1)
replace出现问题。
temp.replace("ÿ","");
答案 2 :(得分:1)
在创建字符串之前从缓冲区中删除字符:
byte[] buffer = new byte[] { 49, 0, 255, 255, 49, 0, 255, 255, 48, 0, 255, 255, 255, 255 }
var cleanBuffer = buffer.Where((b) => b < 128).ToArray();
string temp = Encoding.ASCII.GetString(cleanBuffer);
如果您尝试将其转换为字符串然后删除有问题的字符,则无法区分合法?
字符与放置在那里的字符之间的区别,因为转换失败。也就是说,如果你的缓冲区包含:
{ 63, 63, 49, 0, 255, 255, 49, 0, 255, 255, 48, 0, 255, 255, 255, 255 }
然后生成的字符串将以??1\0??
开头。前两个问号是合法的,但最后两个是转换失败的结果。
答案 3 :(得分:0)
遍历整个字符串,只添加那些ASCII字符。
' http://stackoverflow.com/questions/123336/how-can-you-strip-non-ascii-characters-from-a-string-in-c
Public Shared Function GetAsciiString(ByVal strInputString As String) As String
Dim strASCII As String = System.Text.Encoding.ASCII.GetString( _
System.Text.Encoding.Convert(System.Text.Encoding.UTF8, _
System.Text.Encoding.GetEncoding(System.Text.Encoding.ASCII.EncodingName, _
New System.Text.EncoderReplacementFallback(String.Empty), _
New System.Text.DecoderExceptionFallback()), _
System.Text.Encoding.UTF8.GetBytes(strInputString) _
) _
)
Return strASCII
End Function
Public Shared Function IsAscii(ByVal strInputString As String) As Boolean
'Dim strInputString As String = "Räksmörgås"
If (GetAsciiString(strInputString) = strInputString) Then
Return True
End If
Return False
End Function
编辑: 在这里C#:
// http://stackoverflow.com/questions/123336/how-can-you-strip-non-ascii-characters-from-a-string-in-c
public static string GetAsciiString(string strInputString)
{
string strASCII = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.GetEncoding(System.Text.Encoding.ASCII.EncodingName, new System.Text.EncoderReplacementFallback(string.Empty), new System.Text.DecoderExceptionFallback()), System.Text.Encoding.UTF8.GetBytes(strInputString)));
return strASCII;
}
public static bool IsAscii(string strInputString)
{
//Dim strInputString As String = "Räksmörgås"
if ((GetAsciiString(strInputString) == strInputString)) {
return true;
}
return false;
}