繁体   English   中英

C# 编码问题,字符 '¤' 结果为 '?'

[英]C# encoding issue, Character '¤' result to '?'

我有一个 C# 程序,我在资源文件 (sql.resx) 中存储了一个长的 SQL 查询。

在我的查询中,我有一个特殊的货币字符( ¤ )。 当我的程序从资源文件中获取查询并在 SQL 服务器上执行时,货币字符 ( ¤ ) 显示为不受支持的字符。 在将字符¤附加到结果时,它显示为 而不是¤

对我来说,这似乎是 C# 中的编码问题。

这是查询的摘录,其中的内容是正确的:

    and tb.beward = b.beward and tb.beroom = b.beroom and tb.beidnr = b.beidnr
    and wp.wpspecialbranch = c.tunnus
and ((b.beward + '¤' + b.beroom + '¤' + b.beidnr) LIKE @SCHEDULE

        and 
        ((tb.beward + '¤' + tb.beroom + '¤' + tb.beidnr) LIKE @SCHEDULE))

这就是我观察到的:

    and tb.beward = b.beward and tb.beroom = b.beroom and tb.beidnr = b.beidnr
    and wp.wpspecialbranch = c.tunnus
and ((b.beward + '�' + b.beroom + '�' + b.beidnr) LIKE @SCHEDULE

        and 
        ((tb.beward + '�' + tb.beroom + '�' + tb.beidnr) LIKE @SCHEDULE))

在此处输入图像描述

当我从调试模式复制查询并粘贴到 SQL Server Management Studio 时,就会发生这种情况。

注意:几天前它在我的服务器上运行良好,但现在无法正常运行。 我的服务器上肯定发生了一些变化,但我不确定是什么。

我认为这里有两个问题。

首先,在 SQL 服务器中,带有宽字符的字符串文字需要N前缀:

b.reward + N'¤'

其次,*.resx 文件的字符编码可能是错误的,或者您至少会看到 window 中的字符,即使 Sql 服务器没有正确读取它。

如果这在几天前还有效,那么可能有人使用只知道如何处理 ASCII 的程序打开并保存了文件,并且您的特殊字符被破坏了。 您需要修复该文件。

如果这来自 Visual Studio 调试 window(在试图“提供帮助”的同时以破坏值而臭名昭著),那么您甚至可能没有找对地方。


我还为您准备了三个与问题分开的项目。

看看 SQL,这不会很好。 此处进行的连接使这些列上的任何索引都毫无价值。 如果您将查询构造为不需要连接这些列,您将获得更好的性能......可能是数量级。 至少,可能具有 FULL-TEXT 索引的计算列可以使此查询大大加快。

从逻辑上讲,SQL 也在做额外的工作。 如果bewardberoombeidnr列已经在两个表之间匹配,您只需连接并针对@SCHEDULE输入测试其中一个。 它们具有相同的值,因此如果一个匹配(或不匹配),另一个必须具有相同的结果。

将来,请将代码粘贴到您的问题中。 图像在这里不起作用。 它也可以节省您的工作量。

在 SQL 服务器中

您需要使用能够存储 unicode 字符的数据类型 Nvarchar。

要将字符串文字声明为 nvarchar,您需要在其前面加上 N',否则它只是一个普通的 varchar。 Varchars 仅允许指定基础排序规则中的字符。

b.reward + N'¤'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM