从SQL Server 2005将字符转换为中文/日文字符

时间:2014-12-09 21:55:46

标签: sql-server vba sql-server-2005 utf-8 character-encoding

我遇到的问题是我从SQL Server 2005数据库中提取某些名称并尝试使用输出CSV中的值在Excel目录中使用VBA创建文件夹,但中文/日文字符显示不正确

在SQL Server中,字符串存储为

  

¡è,¡ä»½æ

而不是

  

股份

我希望能够修复字符串的编码并使用更正后的字符来命名新文件夹。我已确定问题与编码有关,我可以使用在线Recode工具转换部分文件。但是,我还没有找到一种方法来转换包含西方字符和东方字符混合的整个文档。我的选择是:

  1. 获取SQL Server以输出字符
  2. 转换CSV文件以便理解字符(可能通过iconv但尚未成功)
  3. 使用VBA转换字符
  4. 我的主要困难是我不理解这些字符的编码。我已阅读文章 What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets 中的编码,但我仍在尝试了解我的具体情况。我也查看了Unicode Support in SQL Server 2005,但没有让Convert()函数起作用。

    更新

    我尝试将win-iconv中提供的所有编码转换为UTF-8,但无法获得任何可用的文字。

2 个答案:

答案 0 :(得分:1)

问题是东亚字符被视为二进制字符并解码为extended ASCII characters。解码它的一种方法是:

  1. 复制损坏的文字
  2. 打开Notepad ++
  3. 开始新文件
  4. 将编码设置为Encode in ASCII
  5. 将文本粘贴到新文件
  6. 将编码设置为Encode in UTF-8
  7. 注意: 如果扩展ASCII代码表(128-255)中有任何字符(如ñ),则可能无法正确编码。此外,如果字符串被截断,则字符串末尾可能会有部分补充字符。

答案 1 :(得分:0)

您可以使用ADODB Stream对象作为文本(对于Windows自动转换)或二进制(如果您希望未转换的原始字节)打开。

确保在两台计算机上都设置了您的语言环境,非unicode程序的默认语言等。控制面板中的区域选项。

如果没有运气,请尝试将ADODB二进制流(可能是一个字节数组)传递给VBA的StrConv函数。还有Win32 API函数以及更多控件。

File.ResponseBody包含来自XMLHTTP的二进制数据。

Set BS = CreateObject("ADODB.Stream")
 BS.type = 1
 BS.open
 BS.Write File.ResponseBody
 BS.SaveToFile "c:\users\safetyscanner.exe", 2