识别字符串中有问题的字符

时间:2013-03-02 15:32:19

标签: c# sql-server encoding character-encoding linq-to-entities

我希望能够使用LINQ to Entities在我的sql server中保存的字符串中识别有问题的字符。

有问题的字符是编码过程中出现问题的字符。

这是一个有问题的字符串示例:“testing stringáאç”。

在上面的例子中,只有 字符被认为是有问题的。

因此,例如,以下字符串不被视为有问题:“testingstringáאç”。 如何查看此Varchar并确定其中存在有问题的字符?

请注意,我首选的解决方案是通过LINQ to实体查询来识别它,但也欢迎其他解决方案 - 例如:某些商店程序可能?

我尝试使用正则表达式和“LIKE”声明,但没有成功......

3 个答案:

答案 0 :(得分:2)

查看the Encoding class

它有DecoderFallback PropertyEncoderFallback Property,可让您检测并替换解码过程中发现的错误字符。

答案 1 :(得分:1)

您可以这样做:

DECLARE @StringWithProblem NVARCHAR(20) = N'This is '+NCHAR(8)+N'roblematic';
DECLARE @ProblemChars NVARCHAR(4000) = N'%['+NCHAR(0)+NCHAR(1)+NCHAR(8)+']%'; --list all problematic characters here, wrapped in %[]%

SELECT PATINDEX(@ProblemChars, @StringWithProblem), @StringWithProblem;

它为您提供第一个有问题的字符的索引,如果没有找到则为0。

答案 2 :(得分:1)

.Net和NVARCHAR都使用Unicode,因此没有任何内在的“问题”(至少不是BMP字符)。

因此,您首先必须定义“有问题”的含义:

  • 字符未映射到目标代码页

只需在编码之间进行转换并检查数据是否丢失:

CONVERT(NVARCHAR, CONVERT(VARCHAR, @originalNVarchar)) = @originalNVarchar

请注意,您可以使用COLLATE子句而不是使用默认数据库排序规则来使用SQL Server排序规则。

  • 由于使用了字体而无法显示字符

这在.Net

中无法轻易完成