我正在构建(我认为)一个简单的闪存卡程序来帮助我学习西班牙语。即,将英语译成西班牙语,或者将西班牙语译成英语。我正在使用C#和SQL Server。该代码工作正常,除了我正在努力弄清楚如何使用西班牙的变音符,例如“á,é,í,ó,ú,ñ”。具体来说,虽然我可以使用win10专用键盘将它们输入到我的Prep 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部分: 我的过程如下:
关于数据库表,列定义为: SpanWord varchar(100),
我从切换回了: SpanWord nvarchar(100),
因为那也不起作用... 谢谢
第3部分: 我同意这太含糊且不够简洁。我将其分解为各个部分并进行研究。然后完成整个过程。
我不认为我可以关闭此问题,因此,如果有人拥有适当的权限,请为我关闭此问题...再次感谢!我有足够的工作要做。
答案 0 :(得分:1)
这个问题有太多可能的问题。您应该关注数据处理过程中的每个步骤,并确保数据仍然“良好”。找到特定问题后,您可以研究该特定问题,如果找不到答案,则应为该问题创建MCVE,然后然后询问一个问题。
这里有一些高级指针:您应确保正在读取CSV文件的程序通过调试来正确读取字符。如果不是,则最可能的原因是编码:更改读取器以根据字节顺序标记决定编码,如下所示:
new StreamReader(INFILE, Encoding.Default, true)
如果这不起作用,则可以明确告知要使用哪种编码。 (您可以通过在记事本中打开文件并执行“另存为...”来查看文件的编码。)
然后,您还需要确保使用适当的编码来编写文件-我建议您使用输入文件的任何编码。
我怀疑您需要将数据库字段更改为nvarchar
,除非您需要的所有字符都是covered by varchar
。一旦正确,并且文件具有正确的编码,该文件的大容量插入就可以正常工作。
您没有显示将数据库中的数据读取到WinForms应用程序中的代码。所以我只能猜测那里没有问题。
答案 1 :(得分:0)
感谢Richardissimo!我把这个问题分解成更容易处理的部分:
c#控制台应用程序读取csv文件,添加更多列,然后写出另一个csv文件,需要使用Richard所说的编码。
using (StreamReader reader = new StreamReader(File.OpenRead(INFILE),
Encoding.Default, true))
{
using (StreamWriter writer = new StreamWriter(File.Open(OUTFILE, FileMode.Create),
Encoding.Default))
这有效,我验证了输出文件中包含西班牙语变音符号。
注意:我不需要将西班牙语单词列(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.
谢谢大家!