合并csv打破了变音字符

时间:2017-03-15 10:09:47

标签: windows csv batch-file cmd merge

我正在尝试合并一些csv文件。我在Windows上使用cmd(如type *.csv >>)或批处理文件(包含

)执行此操作
echo. > all.csv
for %%a in (*.csv) DO copy /b alle.csv+%%a all.csv

在一台计算机上(win7x64)合并没问题。但是在另一个(同样的win7x64)中,所有变音字符(德语:äüöß)都被打破 - 而不是它们只有',,'。

应合并的源文件具有健康的变音字符 - 我用Notepad ++和Excel打开它们,如ANSI或Unicode - 一切正常。

如何调整文件合并以保存变音符号?

2 个答案:

答案 0 :(得分:1)

我认为有几个问题会导致意外结果:

  1. 您尝试按echo. > all.csv创建一个空文件,但这实际上会生成一个包含 SPACE 的文件,然后是换行符( CR < / kbd> + LF ),ANSI编码。因此,您可能有不同编码的文件,这可能会导致麻烦。

    要真正创建空文件,请使用rem/ > all.csvbreak > all.csvtype nul > all.csvcopy /Y nul all.csv

  2. 将文件与copy组合在一起时,如果目标文件也是源文件之一,则可能会出现问题。当它是第一个源文件时,附加每个其他源文件的数据;当它不是第一个源文件时,可能会出现覆盖提示(除非您指定/Y),数据可能会丢失。由于您已将*.csv作为源文件,因此我们实际上并不知道首先枚举哪个源文件,因此它可能是all.csv,也可能不是del all.csv。因此,为避免此类问题,最好在复制前删除目标文件,而不是创建空文件,例如0xFF

  3. 假设您有Unicode文件,它们以双字节标头0xFE + copy /B开头。使用copy /A组合此类文件时,文件中有多个这些标头。要解决此问题,请执行cmd但在由cmd /U启动的Unicode cmd /U /C del all.csv ^& copy /A *.csv all.csv 实例中:

            // Add framework services.
            services
                .AddMvc(options => {
                    options.RespectBrowserAcceptHeader = true;
                })
                //support application/xml
                .AddXmlDataContractSerializerFormatters()
                //support application/json
                .AddJsonOptions(options => {
                    options.SerializerSettings.ContractResolver = new DefaultContractResolver();
                });
    

答案 1 :(得分:0)

copy /b *.csv all.txt & ren all.txt all.csv

2>nul del all.csv & copy /b *.csv all.csv

type命令可以进行一些可能会干扰过程的更改。更好地使用copy /b(有或没有for),但要确保生成的文件不存在或被选中以避免它被包含在流程中作为源。

您还应确保所有文件具有相同的编码。如果其中一些是Unicode / UTF-?有了BOM而有些没有,根据选择的第一个文件,你可能会以糟糕的格式化数据结束。