我尝试检测我的文件中使用了哪个字符编码.
我尝试使用此代码来获取标准编码
public static Encoding GetFileEncoding(string srcFile)
{
// *** Use Default of Encoding.Default (Ansi CodePage)
Encoding enc = Encoding.Default;
// *** Detect byte order mark if any - otherwise assume default
byte[] buffer = new byte[5];
FileStream file = new FileStream(srcFile, FileMode.Open);
file.Read(buffer, 0, 5);
file.Close();
if (buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf)
enc = Encoding.UTF8;
else if (buffer[0] == 0xfe && buffer[1] == 0xff)
enc = Encoding.Unicode;
else if (buffer[0] == 0 && …Run Code Online (Sandbox Code Playgroud) 我正在寻找普通旧C中的代码片段,它检测到给定的字符串是UTF-8编码.我知道正则表达式的解决方案,但由于各种原因,最好避免在这种特殊情况下使用除了普通C之外的任何东西.
正则表达式的解决方案如下所示(警告:省略了各种检查):
#define UTF8_DETECT_REGEXP "^([\x09\x0A\x0D\x20-\x7E]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$"
const char *error;
int error_off;
int rc;
int vect[100];
utf8_re = pcre_compile(UTF8_DETECT_REGEXP, PCRE_CASELESS, &error, &error_off, NULL);
utf8_pe = pcre_study(utf8_re, 0, &error);
rc = pcre_exec(utf8_re, utf8_pe, str, len, 0, 0, vect, sizeof(vect)/sizeof(vect[0]));
if (rc > 0) {
printf("string is in UTF8\n");
} else {
printf("string is not in UTF8\n")
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个纯文本阅读器应用程序.有时app无法自动确定文件的编码,因此用户需要从编码列表中选择编码.如果此列表包含所有支持的编码,则它将太长.我想提供一个简化的列表,只包含每种语言最常见的编码.
这是我所知道的一些关系:
如果您知道任何其他语言最常见的编码,请告诉我.
我需要确定文本文件的内容是否等于这些文本编码之一:
System.Text.Encoding.ASCII
System.Text.Encoding.BigEndianUnicode ' UTF-L 16
System.Text.Encoding.Default ' ANSI
System.Text.Encoding.Unicode ' UTF16
System.Text.Encoding.UTF32
System.Text.Encoding.UTF7
System.Text.Encoding.UTF8
Run Code Online (Sandbox Code Playgroud)
我不知道如何读取文件的字节标记,我已经看到片段这样做,但只能确定文件是ASCII还是Unicode,因此我需要更通用的东西.
如何确定字符串是否已在C#中以编程方式编码?
让我们举例如字符串:
<p>test</p>
Run Code Online (Sandbox Code Playgroud)
我想让我的逻辑理解它已被编码的这个值..任何想法?谢谢
我正在使用以下方式读取文件:
var source = File.ReadAllText(path);
Run Code Online (Sandbox Code Playgroud)
并且角色©没有正确加载.
然后,我将其更改为:
var source = File.ReadAllText(path, Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)
没别的了.
我决定尝试使用
var source = File.ReadAllText(path, Encoding.Default);
Run Code Online (Sandbox Code Playgroud)
它工作得很好.然后我调试它,并试图找到哪个编码做了伎俩,我发现它是UTF-7.
我想知道的是:
是否建议使用Encoding.Default,是否可以保证文件的所有字符都可以正常读取?
我将从UTF8格式转换为十六进制的实际值.但是,我需要捕获一些无效的字节序列.有没有一种快速方法可以检查角色是否属于C++中的UTF8?
可能吗?我想检查一个字符串是否是utf-8编码.
更新:所以,问题是:我有一个php webservice.此Web服务有一个接收字符串的方法.我正在尝试将VB.NET JSON字符串传递给此Web服务.json_decode总是返回一个错误,说该字符串不是utf-8.如果我传递字符串并使用PHP utf8_encode转换它,则重音出错!我怎么能解决这个问题?
可能重复:
在C#中确定字符串的编码
许多文本编辑器(如Notepad ++)可以检测任意文件的编码.我可以在C#中检测到文件的编码吗?
可能重复:
在C#中确定字符串的编码
我相信,如果我创建一个字符串,它默认为UTF8,但是如果字符串是在其他地方创建的,我想在处理之前更加安全并检查它的编码是什么我看不到任何简单的方法来使用字符串或编码类.我错过了什么或者C#字符串总是UTF8,不管是什么?