从 C# 字符串中删除不属于特定代码页的字符

Remove characters from C# string not belonging to a specicif code page

在 C# 中,我有一个字符串继续使用代码页 37 US 插入数据库 table。例如,'€' 将导致插入操作失败。

有什么好方法可以清除代码页 37 中未显示的字符串并可能用一些默认字符替换这些字符?

是这样的吗?

        var euroString = "abc?€./*";
        var encoding37 = System.Text.Encoding.GetEncoding(
            37, 
            new EncoderReplacementFallback("_"), //replacement char
            new DecoderExceptionFallback());
        var byteArrayWithFallbackChars = encoding37.GetBytes(euroString);
        var utfStringFromBytesWithFallback = new string(encoding37.GetChars(byteArrayWithFallbackChars));
        //returns "abc?_./*"

P.S.: 你可以只使用 GetEncoding(37),但在这种情况下,替换字符是 ?,我认为这对 DB 来说不太好 :)

这是一个将输入限制在允许字符范围内的正则表达式:

https://dotnetfiddle.net/WIrSSO

const string Allowed = @"1-9\."; //Add allowed chars here
string cleanStr = Regex.Replace("£1.11", "[^" + Allowed + "]", "");