为了账号安全,请及时绑定邮箱和手机立即绑定

在 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条经验 获得超7个赞

这个问题有太多可能的问题。您应该关注数据旅程中的每一步,并确保数据仍然“良好”。一旦你找到一个特定的问题,你就可以研究那个特定的问题,如果你找不到答案,那么你应该为那个问题创建一个MCVE然后你可以提出一个问题。

以下是一些高级提示: 您应该通过调试确保正在读取 CSV 文件的程序正确读取字符。如果不是,最可能的原因是编码:更改读取器以根据字节顺序标记决定编码,如下所示:

new StreamReader(INFILE, Encoding.Default, true)

如果这不起作用,您可以具体告诉它使用哪种编码。(您可以通过在记事本中打开文件并执行“另存为...”来查看文件的编码。)

然后,您还需要确保使用适当的编码编写文件 - 我建议使用输入文件的任何编码。

我怀疑您需要将数据库字段更改为nvarchar,除非您需要的所有字符都varchar. 一旦正确,并且文件具有正确的编码,则该文件的批量插入应该可以工作。

您没有显示将数据从数据库读取到 WinForms 应用程序的代码;所以我只能猜测那里没有问题。


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

TA贡献1821条经验 获得超4个赞

感谢理查迪西莫!我将问题分解为更易于管理的部分:


读取 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 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信