我之前已经问过这个问题并得到了答案。 但现在我面临着一个不同的问题。 我有一个文件名。名字是:<〜'‡™...... 我想解码它以获得它的希伯来语值。 我使用的代码:
Encoding latinEncoding = Encoding.GetEncoding("Windows-1252");
Encoding hebrewEncoding = Encoding.GetEncoding(862);
byte[] latinBytes = latinEncoding.GetBytes(str);
string hebrewString = hebrewEncoding.GetString(latinBytes);
此代码效果不错但不是很好。我的意思是很少有字符被解码为“?”而不是他们的希伯来价值。
所以使用这段代码解码给定的名字给了我:“כרטס?חשבונו?”而不是“כרטסתחשבונות”。 有这个问题的希伯来字符是:ך,ל,מ,ת。 所有其他的解码都很好。
我找到了解决方案,但如果可能,我想避免使用它。 解决方案是将给定的字符串保存到文件中,然后使用862编码读回文件。 代码是:
string str = "‹˜ˆ‘ ‡™……";
// Get uniqe file name based on current date and time
reportFileName = DateTime.Now.ToString().Replace("/", "-").Replace(":", ";");
// set the file path
string repFilePath = parametersFolder + @"\" + reportFileName;
// save the value to a file with 1255 encoding
File.WriteAllText(repFilePath, str, Encoding.GetEncoding(1255));
// read the value back with 862 encoding
string s = File.ReadAllText(repFilePath, Encoding.GetEncoding(862));
// Delete the file
File.Delete(repFilePath);
// Save the value to a variable.
generatedFileName = s;
答案 0 :(得分:0)
找到解决方案。由于某种原因,它现在有效,但我很肯定我在发布问题之前尝试了它并且它没有用。
Encoding latinEncoding = Encoding.GetEncoding("Windows-1255");
Encoding hebrewEncoding = Encoding.GetEncoding(862);
byte[] latinBytes = latinEncoding.GetBytes(str);
string hebrewString = hebrewEncoding.GetString(latinBytes);
将字符串读取为1255编码而不是1252编码。