0

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

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

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

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

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

请注意,我首选的解决方案是通过 LINQ to entity query 来识别它,但也欢迎使用其他解决方案 - 例如:可能是某些存储过程?

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

4

3 回答 3

2

查看编码类

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

于 2013-03-02T15:45:44.583 回答
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。

于 2013-03-02T15:46:23.857 回答
1

.Net 和 NVARCHAR 都使用 Unicode,因此本质上没有什么“问题”(至少对于 BMP 字符来说不是)。

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

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

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

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

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

  • 由于使用的字体,字符无法显示

这在 .Net 中不容易做到

于 2013-03-02T15:59:39.977 回答