亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 C# 和 SQL Server 中,如何使用和顯示變音符號?

在 C# 和 SQL Server 中,如何使用和顯示變音符號?

C#
胡說叔叔 2021-12-05 17:02:56
我正在構建(我認為)一個簡單的閃存卡程序來幫助我學習西班牙語。即,將英語轉換為西班牙語,或將西班牙語轉換為英語。我正在使用 C# 和 SQL Server。代碼運行良好,只是我正在努力弄清楚如何使用諸如“á、é、í、ó、ú、?”之類的西班牙變音符號。具體來說,雖然我可以使用 win10 特殊鍵盤將它們輸入到我的準備 Excel 電子表格中,并且它們顯示正確,但當我將它們加載到我的 SQL Sever 數據庫中并通過 VS C# Winforms 程序訪問時,它們顯示不正確。我曾嘗試使用nvarchar而不是varchar, 并且只是以一種陌生的格式加載和顯示這些字符。我曾嘗試將默認鍵盤切換為西班牙語,但這完全將我切換為西班牙語。另外,請注意,當我使用 Note++ 使用它們時,它們會正確顯示。當我在 c# 中處理它們時,它們輸入正確,但在處理時卻StreamWriter沒有。在將 Excel.csv數據加載到數據庫之前,我會處理每個數據以添加一些額外的列。using (StreamReader reader = new StreamReader(File.OpenRead(INFILE))){    using (StreamWriter writer = new StreamWriter(File.Open(OUTFILE, FileMode.Create)))    {        while ((sLineIn = reader.ReadLine()) != null)   // Process each input record until no more        {            iRecIn++;                       // Count input records            if (bFirstRecord)            {                iRecOut++;                  // Account for title line                bFirstRecord = false;       // Skip first record                continue;            }            sLineOut = processLineOut(sLineIn);            writeTheRecord(writer);            continue;        }    }}我只是不知道下一步該去哪里。謝謝!!
查看完整描述

2 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

這個問題有太多可能的問題。您應該關注數據旅程中的每一步,并確保數據仍然“良好”。一旦你找到一個特定的問題,你就可以研究那個特定的問題,如果你找不到答案,那么你應該為那個問題創建一個MCVE,然后你可以提出一個問題。

以下是一些高級提示: 您應該通過調試確保正在讀取 CSV 文件的程序正確讀取字符。如果不是,最可能的原因是編碼:更改讀取器以根據字節順序標記決定編碼,如下所示:

new StreamReader(INFILE, Encoding.Default, true)

如果這不起作用,您可以具體告訴它使用哪種編碼。(您可以通過在記事本中打開文件并執行“另存為...”來查看文件的編碼。)

然后,您還需要確保使用適當的編碼編寫文件 - 我建議使用輸入文件的任何編碼。

我懷疑您需要將數據庫字段更改為nvarchar,除非您需要的所有字符都varchar. 一旦正確,并且文件具有正確的編碼,則該文件的批量插入應該可以工作。

您沒有顯示將數據從數據庫讀取到 WinForms 應用程序的代碼;所以我只能猜測那里沒有問題。


查看完整回答
反對 回復 2021-12-05
?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

感謝理查迪西莫!我將問題分解為更易于管理的部分:


讀取 csv 文件、添加更多列然后寫出另一個 csv 文件的 c# 控制臺應用程序需要如 Richard 所說的編碼。


    using (StreamReader reader = new StreamReader(File.OpenRead(INFILE),

        Encoding.Default, true))

    {

        using (StreamWriter writer = new StreamWriter(File.Open(OUTFILE, FileMode.Create),

            Encoding.Default))

這行得通,我驗證了輸出文件包含西班牙變音符號。


我仍然遇到 sql server 2016 數據庫的問題。我嘗試了 COLLATE 參數的幾種變體,但在創建表上不起作用。我發現我需要在 BULK INSERT 語句中指定 CODEPAGE = '1252' 作為參數。然后一旦加載,SELECT 就會正確顯示變音字符,包括我的 c# WinForms 應用程序。

注意:我不需要將西班牙語單詞列 (SpanWord) 更改為 nvarchar。我將它保留為 varchar,因為所有的西班牙方言都包含在 varchar 中。它們僅大于 127。


每個 MS:


CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }

Specifies the code page of the data in the data file. CODEPAGE is relevant

only if the data contains char, varchar, or text columns with character values

greater than 127 or less than 32. 


查看完整回答
反對 回復 2021-12-05
  • 2 回答
  • 0 關注
  • 238 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號