相关疑难解决方法(0)

这个炭是什么?65279''

我有两个字符串.

一个是"\""

另一个是"\""

我认为他们是一样的.

然而,String.Compare他们说是不同的.

这很奇怪.

这是我的代码:

string b = "\"";
string c = "\"";

if (string.Compare(b, c) == 0)
{
    Console.WriteLine("Good");
}

if (c.StartsWith("\""))
{
    Console.WriteLine("C");
}

if (b.StartsWith("\""))
{
    Console.WriteLine("B");
}
Run Code Online (Sandbox Code Playgroud)

我预计它可能会打印"GoodCB".

但是,它只打印"B".

在我的调试器中,c[0]是65279''并且c[1]是34'''.并且b[0]是'''.

但我不知道65279'是什么.

这是一个空洞的角色吗?

c# char

47
推荐指数
3
解决办法
3万
查看次数

如何避免在读取文件时跳过UTF-8 BOM

我正在使用最近添加了Unicode BOM头(U + FEFF)的数据源,而我的rake任务现在被它搞砸了.

我可以跳过前3个字节,file.gets[3..-1]但有没有更优雅的方式来读取Ruby中的文件,无论BOM是否存在,都能正确处理?

ruby unicode byte-order-mark file

40
推荐指数
2
解决办法
2万
查看次数

从File.ReadAllBytes(byte [])中删除字节顺序标记

我有一个HTTPHandler,它读取一组CSS文件并将它们组合起来然后GZipping它们.但是,一些CSS文件包含一个字节顺序标记(由于TFS 2005自动合并中的一个错误),而在FireFox中,BOM被作为实际内容的一部分被读取,因此它搞砸了我的类名等.我怎样才能剥离出BOM字符?有没有一种简单的方法可以在没有手动浏览字节数组的情况下查找""?

c# byte-order-mark

14
推荐指数
2
解决办法
1万
查看次数

在Windows Server 2012中启动更改

编辑:我原本以为这与.NET Framework 4.5有关.原来它也适用于.NET Framework 4.0.

Windows Server 2012中的字符串处理方式发生了变化,我试图更好地理解它.似乎StartsWith的行为已经改变.使用.NET Framework 4.0和4.5可以重现该问题.

使用Windows 7上的.NET Framework 4.5,下面的程序打印"False,t".在Windows 2012 Server上,它会打印"True,t".

internal class Program
{
   private static void Main(string[] args)
   {
      string byteOrderMark = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
      Console.WriteLine("test".StartsWith(byteOrderMark));
      Console.WriteLine("test"[0]);
   }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,无论字符串内容如何,​​StartsWith(ByteOrderMark)都返回true.如果您有使用以下方法尝试剥离字节顺序标记的代码,此代码将在Windows 7上正常工作,但将在Windows 2012上打印"est".

internal class Program
{
  private static void Main(string[] args)
  {
     string byteOrderMark = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
     string someString = "Test";

     if (someString.StartsWith(byteOrderMark))
        someString = someString.Substring(1);

     Console.WriteLine("{0}", someString);
     Console.ReadKey();

  }
Run Code Online (Sandbox Code Playgroud)

}

我意识到如果你在字符串中有字节顺序标记,你已经做错了,但我们正在与具有此功能的遗留代码集成.我知道我可以通过以下方式解决这个具体问题,但我想更好地理解这个问题.

someString = someString.Trim(byteOrderMark[0]);
Run Code Online (Sandbox Code Playgroud)

Hans Passsant建议使用UTF8Encoding的构造函数,它允许我明确地告诉它发出UTF8标识符.我尝试了这个,但它给出了相同的结果.以下代码在Windows 7和Windows Server 2012之间的输出方面有所不同.在Windows 7上,它打印"Result:False".在Windows Server 2012上,它打印"Result:True".

  private static void …
Run Code Online (Sandbox Code Playgroud)

c# string unicode .net-4.5

13
推荐指数
1
解决办法
2480
查看次数

使用XmlWriterSettings和XmlSerializer编写XML片段会产生额外的字符

我需要编写一个由Web服务使用的XML片段.任何xml声明都会导致Web服务拒绝该请求.为了支持这一点,我有以下课程:

public class ContentQueryCriteria
{
    public int Type { get; set; }
    public string Value { get; set; }
    public int Condition { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这允许我设置请求标准,然后得到结果.

代码使用如下:

ContentQueryCriteria content = new ContentQueryCriteria();
            content.Type = 1;
            content.Value = "NAVS500";
            content.Condition = 1;

            string requestBody = SerializeToString(content);
            Console.WriteLine(requestBody);
Run Code Online (Sandbox Code Playgroud)

当我将其序列化为XML文件时,我得到了正确的响应,没有XML声明或任何名称空间.但是,我宁愿捕获内存流中的数据,而不是文件.

使用以下方法(取自http://www.codeproject.com/Articles/58287/XML-Serialization-Tips-Tricks)我能够取得成果,但出于某种原因,我有一个?列为字符串的一部分.

public static string SerializeToString(object obj)
{
    XmlSerializer serializer = new XmlSerializer(obj.GetType());
    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
    ns.Add("", "");

    MemoryStream ms = new MemoryStream();

    XmlWriterSettings settings = new XmlWriterSettings(); …
Run Code Online (Sandbox Code Playgroud)

c# xml-serialization

6
推荐指数
1
解决办法
2738
查看次数

用空格替换Unicode字符"�"

我正在从.csv文件中大量上传信息,我需要将此字符替换为ascii"�"以获取正常空间"".

对于C/C++/JAVA,字符"�"对应于"\ uFFFD",它似乎称为REPLACEMENT CHARACTER.其他如C#官方文档中的空格类型如U + FEFF,205F,200B,180E,202F.

我正在尝试以这种方式替换

public string Errors="";

public void test(){

    string textFromCsvCell= "";
    string validCharacters="^[0-9A-Za-z().:%-/ ]+$";
    textFromCsvCell="This is my text from csv file"; //ALl spaces aren't normal space " "
    string cleaned = textFromCsvCell.Replace("\uFFFD", "\"")     
      if (Regex.IsMatch(cleaned, validCharacters ))
        //All code for insert
      else
         Errors=cleaned;
         //print Errors
}
Run Code Online (Sandbox Code Playgroud)

测试方法给我看这个文字:

"这是来自csv文件的my�texto"

我尝试了一些解决方案

尝试解决方案1:使用修剪

 Regex.Replace(value.Trim(), @"[^\S\r\n]+", " ");
Run Code Online (Sandbox Code Playgroud)

尝试解决方案2:使用替换

  System.Text.RegularExpressions.Regex.Replace(str,@"\s+"," ");
Run Code Online (Sandbox Code Playgroud)

尝试解决方案3:使用修剪

  String.Trim(new char[]{'\uFEFF','\u200B'});
Run Code Online (Sandbox Code Playgroud)

尝试解决方案4:将[\ S\r \n]添加到validCharacters

  string validCharacters="^[\S\r\n0-9A-Za-z().:%-/ ]+$";
Run Code Online (Sandbox Code Playgroud)

什么都行不通

有人有想法吗?我怎样才能更换它?我非常感谢你的帮助,谢谢

资料来源:

http://www.fileformat.info/info/unicode/char/0fffd/index.htm

尝试用一个空格替换所有空白区域

从C#中的字符串剥离字节顺序标记

C#Regex - 删除额外的空格但保留新行 …

c# regex validation trim

6
推荐指数
1
解决办法
5945
查看次数