簡體   English   中英

刪除雙反斜杠C#(用於ESC / POS編程)

[英]Remove double backslashes c# (for use ESC/POS programming)

我已經待了很長時間了,看來我的問題已廣為人知。 但是,所有給出的答案對我都行不通。 大多數時候,人們說“沒有問題”。

問題:我正在編程POS解決方案,並且正在使用Epson POS打印機。 要將臀部打印到收據上,我正在數據庫中存儲一個字符串。 這樣,用戶就可以調整收據底部的文本。 但是,當我從數據庫中提取字符串時,C#在字符串中添加了斜杠,因此我的排字字符將無法工作。 我知道,這通常不是問題,但就我而言,是這樣,因為我的ECS / POS命令不起作用。

我已經嘗試過一些腳本,用單\\代替雙\\,但是它們不起作用。 (例如String.Replace(@'\\\\',@'\\')。

問題:

我有一個刺:“ foo \\ n bar”

需要打印為:

酒吧

C#添加斜杠:“ foo \\\\ n bar”

現在將其打印為:foo \\ n bar

有人知道嗎?

問題是對C#如何處理字符串的誤解。 采取以下示例代碼:

string foo = "a\nb";
int fooLength = foo.Length; \\ 3 characters.
int bar = (int)(foo[1]); \\ 10 = linefeed character.

與:

string foo = @"a\nb"; \\ NB: @ prefix!
int fooLength = foo.Length; \\ 4 characters.
int bar = (int)(foo[1]); \\ 92 = backslash character.

第一個示例使用字符串文字( "a\\nb" ),C#編譯器將其解釋為產生三個字符。 第二個示例使用前綴@的逐字字符串文字 ,它禁止對該字符串進行解釋。

請注意,調試器旨在通過顯示添加了轉義碼的字符串來增加混亂,例如: string foo = "a\\nb" + (Char)9; 導致調試器顯示為"a\\nb\\t"的字符串。 如果在調試器中使用“文本可視化器”(在檢查變量的值時單擊放大鏡),則可以看到文字字符和解釋字符之間的區別。

通常,數據庫旨在不經解釋地接受和返回字符串值。 這樣,您就不必擔心“ Delete D'table”之類的名稱。 SQL關鍵字的存在或SQL語句中使用的標點都不應該在data列中出現問題。

現在,OP的問題應該變得更加清晰。 從數據庫檢索的字符串不包含換行符,而是包含字符“ \\”和“ n”。 從數據庫讀取字符串並將其寫入打印機時,.NET沒有理由更改這些值。 不幸的是,調試器混淆了兩者之間的差異。 (如上所述,使用文本可視化器。)

該解決方案涉及添加代碼以重現C#編譯器對轉義序列的處理。 (這應該包括轉義的轉義字符!)或者,可以添加適合於當前應用程序的令牌,例如,可以用ASCII轉義字符替換出現的«ESC» 這可以用於更長的序列,例如,如果印刷品使用多個字符進行字體更改,然后編寫代碼以正確的序列替換«SetFont» 通常,您可以用動態值替換代碼段 ,例如,在打印收據時,可以將«Now»替換為當前日期/時間。 (寄存器號,收銀員姓名,營業時間等。)這使得數據庫中的值比嵌入式Unicode奇數更易於閱讀,比固定字符串更靈活。

留給讀者練習:擴展代碼片段以支持格式設置和空值替換。 «Now|DD.MM.YY hh:mm»指定格式, «Discount|*|n/a»指定字段為空時要顯示的值(“ n / a”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM