Replace()使用十六进制值

时间:2017-04-05 10:22:37

标签: c# .net hex culture

我想使用Replace()方法,但使用十六进制值而不是字符串值。

我在C#中有一个编写文本文件的程序。

我不知道为什么,但是当程序写'°'( - >数字)时,它的写入是º°(十六进制:C2 B0而不是B0)。

我只是想修补它,以便将其核心化。

是否可以重新放置以便用B0替换C2B0?怎么做?

非常感谢:)

2 个答案:

答案 0 :(得分:0)

Not sure if this is the best solution for your problem but if you want a replace function for a string using hex values this will work:

<html>
<head><style>
    table { border-collapse: collapse; }
    table, th, td { border: 1px solid black;  padding: 10px;}
</style></head>
<body>
    <table class='rule level_1'>
    <tr>
        <td>
        <div style="display: inline-block">
            Lorem ipsum
            <hr>
        </div>
        <br>

        Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
        </td>
    </tr>
    <tr>
        <td>
        <div style="display: inline-block">
            Lorem ipsum dolor sit amet, consectetur adipiscing elit
            <hr>
        </div>
        <br>

        Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
        </td>
    </tr>
    </table>
</body>
</html>

答案 1 :(得分:0)

C#字符串是Unicode。将它们写入文件时,必须应用编码。 File.WriteAllText使用的默认编码为utf-8 with no byte order mark

双字节序列0xC2B0表示°度符号U + 00B0代码点in utf-8

要删除0xC2部分,请应用其他编码,例如latin-1:

var latin1 = Encoding.GetEncoding(1252);
File.WriteAllText(path, text, latin1);

解决问题的“十六进制替换”概念:从现有文件中删除utf-8前导字节的最佳做法是使用utf-8执行ReadAllText,然后执行{{1}如上所示(如果文件太大而无法读取整个内存,则流分块)。

单字节字符编码不能代表所有Unicode字符,因此您的DataTable中的任何此类字符都会进行替换。

作为°的再现必须归咎于用于显示文件的查看器/编辑器。

进一步阅读:https://stackoverflow.com/a/17269952/1132334