问题描述一:
在做单元测试的时候,需要为数据库初始化一些测试数据,就手工创建了一个包含大量Insert语句的脚本文件,用来往数据库插入数据,用如下的语句完成插入动作:
OSQL -S 192.168.1.28 -U sa -P sa -i "c:\test.sql"
命令完成后,数据被成功插入相应表中。打开NUnit运行测试用例,部分测试用例不过,颇费周折后发现,其中的三个特殊字符在被插入到数据库后被转换成了其他字符,这三个字符是三个丹麦字符(øåæ)。所以在做字符串比较时与给定的字符串不等。
问题的是找到了,可原因何在呢。打开脚本文件,拷贝粘贴SQL语句至查询分析器中运行,检查结果无误,看来问题就出在OSQL读取文件时出错。在DOS命令窗口中运行 type c:\test.sql 来查看内容,结果出现预期的情况,三个特殊字符不能被正确读取。用记事本打开文件,然后另存文件,发现文件的编码方式是ANSI编码,试着将文件另存成Unicode编码,再用OSQL执行,结果终于正常。
问题被解决,以为事情可以告一段落,没想到新的问题在第二天又出现了,问题描述如下:
问题描述二:
公司采用SourceOffSite管理项目文档,将test.sql文件上传到SOS服务器后,再下载下来,便出现了新的情况,打开文件一看,傻眼了,文件全变成了乱码,SOS不能识别Unicode文件,将test.sql文件另存成ANSI编码方式,再上传到服务,再下载下来观察,结果正常。
新的问题原因找到了,便有了如下的解决方案:
既然SOS服务不能存储Unicode编码方式文本文件,只能仍然将脚本文件存成ANSI格式,这样便解决了问题二。再运行OSQL命令前,用如下的代码先将文件另存成Unicode编码方式再转交给OSQL工具使用,问题一得以解决。
将文本文件另存成Unicode (C#版)
























