摆脱字符串中的扩展ASCII字符

时间:2011-10-31 14:20:48

标签: c# ascii

我有一个扩展名为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值,或者更好的是缓冲区。

4 个答案:

答案 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;
}