有没有办法在C#中确定字符串的编码?
说,我有一个文件名字符串,但我不知道它是用Unicode UTF-16编码还是系统默认编码,我怎么知道呢?
好吧,我需要找出我在某个目录中找到的哪些文件是UTF8编码的ANSI编码,以便在我稍后决定的其他内容中更改编码.我的问题是..如何判断文件是UTF8还是ANSI编码?这两种编码实际上都在我的文件中.
我将从UTF8格式转换为十六进制的实际值.但是,我需要捕获一些无效的字节序列.有没有一种快速方法可以检查角色是否属于C++中的UTF8?
所以,我正在研究一个普通的C(ANSI 9899:1999)项目,我正在试图弄清楚从哪里开始:Unicode,UTF-8和所有爵士乐.
具体来说,它是一个语言解释器项目,我有两个主要的地方,我需要处理Unicode:读取源文件(表面上支持Unicode标识符的语言等),以及'字符串'对象.
我熟悉所有关于Unicode,UTF-7/8/16/32和UCS-2/4的明显基础知识,等等......我主要是寻找有用的,特定于C的(也就是说,请没有C++或C#,这就是之前在SO上记录的所有资源)关于实现Unicode友好的东西的"后续步骤"的资源......在C.
任何链接,联机帮助页,维基百科文章,示例代码都非常受欢迎.我还将尝试在原始问题中维护此类资源的列表,以供稍后发生的任何人使用.
man 3 iconv(以及iconv_open和iconvctl)libbasekit,似乎包括轻型Unicode处理工具我使用这个函数的略微修改版本is_utf8 /sf/answers/72224141/从字符数组中提取UTF8序列,返回序列及其中的字节数,以便我可以在此处迭代字符串办法.
但是我现在想要在字符串()上向后迭代char *.做这个的最好方式是什么?
我的猜测是尝试将字符串的最后四个,三个,两个和一个字节分类为utf8(四次)并选择最长的字节.
但是,utf8是否具有暧昧的情况?例如可以aaaabb解析为aaaa.bb也可以(向后)解析为aa.aabb其中aa,aaaa,bb和aabb是有效的UTF8序列?
我对UTF8有基本的了解:代码点具有可变长度,因此"字符"可以是8位,16位甚至更长.
我想知道的是,如果C语言中有一些示例代码,库等与UTF8字符串类似,就像CEg中的标准库那样告诉字符串的长度等等.
谢谢,
如何区分UTF-8(无BOM)和ASCII文件?
我有来自其他程序的数据填充的字符串,这些数据可以是UTF8编码.所以,如果不是我可以编码为UTF8,但在C++中检测UTF8的最佳方法是什么?我看到了这个变种/sf/...但是有评论说这个解决方案没有100%检测.因此,如果我对已经包含UTF8数据的UTF8字符串进行编码,那么我将错误的文本写入数据库.
所以我可以使用这个UTF8检测:
bool is_utf8(const char * string)
{
if(!string)
return 0;
const unsigned char * bytes = (const unsigned char *)string;
while(*bytes)
{
if( (// ASCII
// use bytes[0] <= 0x7F to allow ASCII control characters
bytes[0] == 0x09 ||
bytes[0] == 0x0A ||
bytes[0] == 0x0D ||
(0x20 <= bytes[0] && bytes[0] <= 0x7E)
)
) {
bytes += 1;
continue;
}
if( (// non-overlong 2-byte
(0xC2 <= bytes[0] && bytes[0] <= 0xDF) &&
(0x80 <= bytes[1] …Run Code Online (Sandbox Code Playgroud)