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

本文关键字:字符 有问题 字符串 识别 | 更新日期: 2023-09-27 18:01:47

我希望能够识别问题字符在字符串中保存在我的sql服务器使用LINQ到实体。

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

这是一个有问题的字符串的例子:"testing ? string ç"。

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

因此,例如下面的字符串不被认为是有问题的:" testingstring ç"。我如何检查这个Varchar并识别其中有问题的字符?

请注意,我首选的解决方案是通过LINQ到实体查询来识别它,但其他解决方案也受欢迎-例如:一些存储过程可能?

我试着用Regex和"LIKE"语句玩,但没有成功…

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

查看Encoding类

它有一个DecoderFallback属性和一个EncoderFallback属性,可以让你检测和替换在解码过程中发现的坏字符。

。Net和NVARCHAR都使用Unicode,所以没有什么本质上的"问题"(至少对BMP字符没有问题)。

所以你首先要定义"有问题的"是什么意思:

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

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

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

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

  • 字符无法显示,因为使用的字体

这在。net中不容易做到

你可以这样做:

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。