簡體   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