我已经阅读了类似的帖子,他们没有回答我的问题.
在C#中,我有一个我从WebClient.DownloadString获取的字符串.我已经尝试将client.Encoding设置为新的UTF8Encoding(false),但这没有任何区别 - 我仍然在结果字符串的开头以UTF-8的字节顺序标记结束.我需要删除它(用LINQ解析生成的XML),并希望在内存中这样做.
所以我有一个以\ x00EF\x00BB\x00BF开头的字符串,如果它存在,我想删除它.现在我正在使用
if (xml.StartsWith(ByteOrderMarkUtf8))
{
xml = xml.Remove(0, ByteOrderMarkUtf8.Length);
}
Run Code Online (Sandbox Code Playgroud)
但这感觉不对.我已尝试过各种带有流,GetBytes和编码的代码,但没有任何作用.任何人都可以提供"正确"算法从字符串中剥离BOM吗?
谢谢!
在.NET中,我正在尝试使用Encoding.UTF8.GetString方法,它接受一个字节数组并将其转换为string.
看起来这种方法忽略了BOM(字节顺序标记),它可能是UTF8字符串的合法二进制表示的一部分,并将其作为字符.
我知道我可以TextReader根据需要使用a 来消化BOM,但我认为GetString方法应该是某种使我们的代码更短的宏.
我错过了什么吗?这是故意的吗?
这是一个复制代码:
static void Main(string[] args)
{
string s1 = "abc";
byte[] abcWithBom;
using (var ms = new MemoryStream())
using (var sw = new StreamWriter(ms, new UTF8Encoding(true)))
{
sw.Write(s1);
sw.Flush();
abcWithBom = ms.ToArray();
Console.WriteLine(FormatArray(abcWithBom)); // ef, bb, bf, 61, 62, 63
}
byte[] abcWithoutBom;
using (var ms = new MemoryStream())
using (var sw = new StreamWriter(ms, new UTF8Encoding(false)))
{
sw.Write(s1);
sw.Flush();
abcWithoutBom = ms.ToArray();
Console.WriteLine(FormatArray(abcWithoutBom)); // 61, 62, …Run Code Online (Sandbox Code Playgroud) 我正在从服务器发送这个json响应,请求我的IOS 7应用程序.
{
"root": {
"success": "1",
"message": "Successfully retrieved data.",
"data": {
"records": [
{
"receipt_key": "xxxxxxxx",
"receipt_id": "xxxxxxxx",
"store_name": "xxxxxx",
"amount": "xxxx",
"date_purchase": "xxxxxxxx",
"is_processed": "x",
"created_on": "xxxxxxxx",
"modified_on": "xxxxxxxx",
"modified_on_millis": "xxxxxxxx",
"user_folder": "xxxxxxxx",
"category_id": "xxxxxxxx",
"is_deleted": "x",
"currency_id": "xxxxxxxx"
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用以下代码解析上面的json到NSDictionary对象.
NSMutableDictionary *json=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
Run Code Online (Sandbox Code Playgroud)
但是我在上面的代码中遇到了这个错误.
Error Domain = NSCocoaErrorDomain Code = 3840"操作无法完成.(Cocoa error 3840.)"(JSON文本不是以数组或对象开头,而是选项允许未设置片段.)UserInfo = 0x8a8a700 {NSDebugDescription = JSON text没有从数组或对象和选项开始,以允许未设置片段.}
我有一个内容为"test"的文本文件(UTF-8编码).我尝试从这个文件中获取字节数组并转换为字符串,但它包含一个奇怪的字符.我使用以下代码:
var path = @"C:\Users\Tester\Desktop\test\test.txt"; // UTF-8
var bytes = File.ReadAllBytes(path);
var contents1 = Encoding.UTF8.GetString(bytes);
var contents2 = File.ReadAllText(path);
Console.WriteLine(contents1); // result is "?test"
Console.WriteLine(contents2); // result is "test"
Run Code Online (Sandbox Code Playgroud)
conents1不同于contents2- 为什么?
在将CSV文件读入数组的过程中,我注意到第一个数组元素,它是一个字符串,包含一个前导"".
例如:
str = contacts[0][0]
p str
Run Code Online (Sandbox Code Playgroud)
给我...
"SalesRepName"
然后我偶然尝试尝试:
str = contacts[0][0].split(//)
p str
Run Code Online (Sandbox Code Playgroud)
那给了我......
["","S","a","l","e","s","R","e","p","N","a","m"," E"]
我已经检查了数组中的每个其他元素,这是唯一一个包含前导""的字符串.
考虑以下代码:
hash = {"a"=>["B", "C"], "b"=>["C"], "c"=>["D", "E"], "d"=>["F"]}
puts hash["a"]
Run Code Online (Sandbox Code Playgroud)
这只是打印没有.
puts hash["a"].class
Run Code Online (Sandbox Code Playgroud)
这打印 NilClass
以下ruby版本中是否存在某种已知错误?
ruby 2.0.0p247(2013-06-27修订版41674)[universal.x86_64-darwin13]
我希望有人可以帮助我,这让我发疯.我的IDE是JetBrains的RubyMine.我也尝试通过IRB直接运行它.
谢谢
PS.OS是OSX