首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SINGLE_NCLOB需要UNICODE (widechar)输入文件

SINGLE_NCLOB需要UNICODE (widechar)输入文件
EN

Stack Overflow用户
提问于 2016-01-27 21:59:25
回答 1查看 5.9K关注 0票数 7

我遵循了这一过程:

  1. 打开记事本,输入一些文字:"Hello“
  2. 将ansi文件保存为: c:\HelloWorld.txt

然后运行以下查询:

代码语言:javascript
复制
select * from openrowset(bulk 'C:\HelloWorld.txt',single_clob) as test

文本出现在名为:BulkColumn的列中。

然后我这样做:

  1. 打开记事本,输入一些文字:"Hello“
  2. 将unicode文件保存为: c:\HelloWorld.txt

然后运行以下查询:

代码语言:javascript
复制
select * from openrowset(bulk N'C:\HelloWorld.txt',single_nclob) as test

我得到的错误是:

SINGLE_NCLOB需要一个UNICODE (widechar)输入文件。指定的文件不是Unicode。

为什么会这样呢?

EN

回答 1

Stack Overflow用户

发布于 2016-01-28 08:00:03

您需要反复检查如何保存"Unicode“文件。在Windows / .NET / Server中,"Unicode“一词指的是"UTF-16 Little Endian (LE)”。当处理UTF-16大端( be )时,它将被称为"Unicode大端“或”大端Unicode“。UTF-8永远是UTF-8。

我在记事本中创建了一个文件,转到“另存为”,并从"Encoding“下拉列表中选择了"Unicode”,您使用的语句运行得很好:

代码语言:javascript
复制
SELECT *
FROM OPENROWSET(BULK N'C:\temp\OPENROWSET_BULK_NCLOB-test.txt', SINGLE_NCLOB) AS [Test];

如果我用任何其他编码重新保存它,我将得到您正在看到的错误消息。

我还使用了Notepad++,并在“编码”菜单中选择了"Encode in UCS-2 Little Endian“。UCS-2和UTF-16对于代码点U+0000通过U+FFFF是相同的,并且在Notepad++中没有UTF-16选项,所以这是最近的事情。是的,也起作用了。

因此,您实际上并没有将文件保存为"Unicode“。如果您在记事本中选择了"Unicode大端“,就Windows使用该术语的方式而言,这不是" Unicode”,即使它是有效的Unicode编码。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35048884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档