我在更改字符串的ecoding方面遇到了一些问题。实际上,我从使用代码页850编码的DB字符串中读取,我必须准备它们以便适合可互操作的WCF服务。
从DB我读取字符\ x10和\ x11(三角形状),我想将它们转换为Unicode格式,以防止在WCF调用期间出现序列化/反序列化问题。 (个字符 并且根据XML规范无效,即使WCF序列化它们。)
现在,我使用以下代码来隐藏字符串编码,但没有任何反应。结果字符串实际上与原始字符串相同。
我可能错过了一些东西......
请帮帮我!!!
Emanuele的
static class UnicodeEncodingExtension
{
public static string Convert(this Encoding sourceEncoding, Encoding targetEncoding, string value)
{
string reEncodedString = null;
byte[] sourceBytes = sourceEncoding.GetBytes(value);
byte[] targetBytes = Encoding.Convert(sourceEncoding, targetEncoding, sourceBytes);
reEncodedString = sourceEncoding.GetString(targetBytes);
return reEncodedString;
}
}
class Program
{
private static Encoding Cp850Encoding = Encoding.GetEncoding(850);
private static Encoding UnicodeEncoding = Encoding.UTF8;
static void Main(string[] args)
{
string value;
string resultValue;
value = "\x10";
resultValue = Cp850Encoding.Convert(UnicodeEncoding, value);
value = "\x11";
resultValue = Cp850Encoding.Convert(UnicodeEncoding, value);
value = "\u25b6";
resultValue = UnicodeEncoding.Convert(Cp850Encoding, value);
value = "\u25c0";
resultValue = UnicodeEncoding.Convert(Cp850Encoding, value);
}
}
答案 0 :(得分:0)
存储在字符串中的所有字符串实际上都是Unicode.Unicode。阅读:Strings in .Net and C#和The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
编辑:我想你希望转换函数自动将\ x11更改为\ u25c0,但问题是\ x11几乎在任何编码中都有效,差异通常以字符\ x80开头,所以转换函数即使你这样做也会保持它:
string reEncodedString = null;
byte[] unicodeBytes = UnicodeEncoding.Unicode.GetBytes(value);
byte[] sourceBytes = Encoding.Convert(Encoding.Unicode,
sourceEncoding, unicodeBytes);
您可以在unicode.org中看到从CP850到Unicode的映射。因此,要进行此转换,您必须手动更改这些字符。
答案 1 :(得分:0)
您似乎认为基于不正确的理解存在问题。但是jmservera是正确的 - .NET中的所有字符串都在内部编码为unicode。
你没有说出你想要完成的目标。您是否在电线的另一端遇到问题?
仅供参考,您可以使用配置文件中的textMessageEncoding element在WCF绑定上设置文本编码。
答案 2 :(得分:0)
我怀疑这条线可能是你的罪魁祸首
reEncodedString = sourceEncoding.GetString(targetBytes);
它似乎采用了你的目标编码字节串,并要求你的sourceEncoding从它们中产生一个字符串。我没有机会验证它,但我怀疑以下可能更好
reEncodedString = targetEncoding.GetString(targetBytes);
答案 3 :(得分:0)
byte[] sourceBytes =Encoding.Default.GetBytes(value)
Encoding.UTF8.GetString(sourceBytes)
此序列对于从服务下载unicode文件非常有用(例如包含波斯字符的xml文件)
答案 4 :(得分:0)
你应该试试这个:
byte[] sourceBytes = sourceEncoding.GetBytes(value);
var convertedString = Encoding.UTF8.GetString(sourceBytes);