什么是ANSI编码格式?它是系统默认格式吗?它与ASCII有什么不同?
我已经阅读了有关WideCharToMultiByte的文档,但我坚持这个参数:
lpMultiByteStr
[out] Pointer to a buffer that receives the converted string.
Run Code Online (Sandbox Code Playgroud)
我不太确定如何正确初始化变量并将其输入函数
我有一个包含四个文本列的excel文件:其中一个名为ShortDescription,具有最长的值.我在SQL Server 2008数据库中创建了一个表,其中包含四列,ShortDescription列类型设置为NvarChar(Max).
但是当使用SSIS导入和导出对话框时,即使我将OnTruncation选项设置为Ignore,我仍会在标题中收到上述错误.
我试图清除列数据,并且它成功了(所以我确保问题出在ShortDescription列中).我试图将整个数据复制到另一本excel工作簿,但仍然没有运气.
有任何想法吗 ???
我有一个ANSI编码的文本文件,不应该编码为ANSI,因为ANSI不支持重音字符.我宁愿使用UTF-8.
数据可以正确解码还是在转码中丢失?
我可以使用哪些工具?
以下是我的样本:
ç é
Run Code Online (Sandbox Code Playgroud)
我可以从上下文(café应该是café)告诉我们这些应该是这两个字符:
ç é
Run Code Online (Sandbox Code Playgroud) <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="conn.asp"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)
上面的代码是对的吗?
我真的想用这些东西变得更好.我对这样的国际化概念非常有用,但我需要更好地了解它背后的理论.
我读过Spolsky的文章,但我仍然不清楚,因为这三个术语可以互换使用 - 即使在那篇文章中也是如此.我想其中至少有两个人在谈论同样的事情.
我怀疑很高比例的开发人员每天都会通过这些东西.我不想再成为那些开发者之一了.
我有一堆.txt,Notepad ++说(在它的下拉"编码"菜单中)是"ANSI".
它们中有德文字符,[äöüß],在Notepad ++中显示正常.
但是当我File.read 'this is a German text example.txt'
这些时,他们并没有出现在irb中.
那么有谁知道我应该给出什么样的论据Encoding.default_external=
?
(我假设这是解决方案,对吗?)
当'utf-8'
或时'cp850'
,它将"äöüß"中的"ANSI"文件读作"\ xE4\xF6\xFC\xDF"...
(请不要犹豫,在你的答案中提到显而易见的"明显"事物;我几乎和你一样新生,并且仍然知道这个问题就足够了.)
在涉及setlocale的部分中,ANSI C标准在脚注中指出,其行为不受当前语言环境影响的唯一ctype.h函数是isdigit和isxdigit.
isdigit的Microsoft实现依赖于语言环境,因为,例如,在使用代码页1250的语言环境中,isdigit仅对0x30('0') - 0x39('9')范围内的字符返回非零值,而在使用代码页的语言环境中对于上标数字0xB2('²'),0xB3('³')和0xB9('¹'),1252 isdigit也返回非零值.
Microsoft是否依赖于isdigit语言环境违反了C标准?
在这个问题中,我主要对C90感兴趣,C90是微软声称要遵守的,而不是C99.
附加背景:
Microsoft自己的setlocale文档错误地指出isdigit不受语言环境的LC_CTYPE部分的影响.
涵盖ctype.h函数的C标准部分包含一些我认为含糊不清的措辞:
这些函数的行为受当前语言环境的影响.下面将说明仅在不在"C"语言环境中时具有语言环境特定方面的那些函数.
我认为这是模棱两可的,因为不清楚它是什么试图说的isdigit这样的函数,没有关于locale特定方面的注释.它可能试图说这些函数必须假定依赖于语言环境,在这种情况下,Microsoft的isdigit实现就可以了.(除了我之前提到的脚注似乎与这种解释相矛盾.)
我们的一些用户使用无法处理Unicode的电子邮件客户端,即使在邮件头中正确设置了编码等.
我想"规范化"他们收到的内容.我们遇到的最大问题是用户将来自Microsoft Word的内容复制到我们的Web应用程序中,然后通过电子邮件转发该内容 - 包括分数,智能引号以及Word为您帮助插入的所有其他扩展Unicode字符.
我猜这里没有明确的解决方案,但在我坐下来开始编写伟大的查找表之前,是否有一些内置的方法可以让我开始?
基本上涉及三个阶段.
首先,从其他正常字母中删除重音 - 解决方案就在这里
This paragraph contains “smart quotes” and áccénts and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)
去
This paragraph contains “smart quotes” and accents and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)
其次,用它们的ASCII等效替换单个Unicode字符,给出:
This paragraph contains "smart quotes" and accents and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)
在我实现自己的解决方案之前,这是我希望有解决方案的部分.最后,使用合适的ASCII序列替换特定字符 - ½到1/2,依此类推 - 我很确定任何类型的Unicode魔法本身都不支持,但是有人可能已经写了一个合适的查找表我可以再利用.
有任何想法吗?
据我所知 - NTFS支持Unicode文件名(作为Micorsoft声称的UTF-16?).
但官方MSDN文档对于在FAT-32上用于存储文件名(文件路径)的代码页非常模糊.
在这里它说OEM代码页(我假设CP437)用于存储文件名:http://msdn.microsoft.com/en-us/library/windows/desktop/dd317748.aspx
但事实证明,可以有不同的OEM代码页,CP437就是其中之一:http://msdn.microsoft.com/en-us/library/windows/desktop/dd317752.aspx
而且我们现在所有像mount这样的实用程序都支持更多不同的FAT代码页,而不仅仅是OEM代码页集.
那么FAT-32文件名的实际cdepage是什么?这取决于FAT卷创建时的系统代码页?FAT可以支持真正的双字节字符集代码页,如UTF-16吗?或UTF-8等多字节字符集代码页是限制?
更具体的问题: 当我使用CreateFileW函数(如MSDN所述,使用UTF-16作为文件名代码页)在FAT-32卷上创建文件时会发生什么?