从 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 + "]", "");
在 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 + "]", "");