我有一个字符串,我从第三方应用程序收到,我想在我的Windows Surface上使用C#以任何语言正确显示它.
由于编码不正确,我的字符串在西班牙语中看起来像这样:
Acción
而它应该是这样的:
行动组织
根据这个问题的答案: 如何知道C#中的字符串编码,我收到的编码应该是UTF-8,但它是在Encoding.Default(可能是ANSI?)上读取的.
我试图将这个字符串转换成真正的UTF-8,但其中一个问题是我只能看到Encoding类的一个子集(仅限UTF8和Unicode属性),可能是因为我只限于windows表面API.
我已经尝试了一些我在互联网上找到的片段,但到目前为止,东方语言(即韩语)都没有成功.一个例子如下:
var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);
Run Code Online (Sandbox Code Playgroud)
我也尝试将字符串解压缩为字节数组,然后使用UTF8.GetString:
byte[] myByteArray = new byte[myString.Length];
for (int ix = 0; ix < myString.Length; ++ix)
{
char ch = myString[ix];
myByteArray[ix] = (byte) ch;
}
myString = Encoding.UTF8.GetString(myByteArray, 0, myString.Length);
Run Code Online (Sandbox Code Playgroud)
你们有其他想法我可以试试吗?
从Python 2.6 shell:
>>> import sys
>>> print sys.getdefaultencoding()
ascii
>>> print u'\xe9'
é
>>>
Run Code Online (Sandbox Code Playgroud)
我希望在print语句之后有一些乱码或错误,因为"é"字符不是ASCII的一部分,我没有指定编码.我想我不明白ASCII是默认编码的意思.
编辑
参考以下线程: Java App:无法正确读取iso-8859-1编码文件
以编程方式确定输入流/文件的正确字符集编码的最佳方法是什么?
我尝试过使用以下内容:
File in = new File(args[0]);
InputStreamReader r = new InputStreamReader(new FileInputStream(in));
System.out.println(r.getEncoding());
Run Code Online (Sandbox Code Playgroud)
但是在我知道用ISO8859_1编码的文件中,上面的代码产生了ASCII,这是不正确的,并且不允许我正确地将文件的内容呈现回控制台.
我有一个处理各种语言的PHP脚本.不幸的是,每当我尝试使用时json_encode,任何Unicode输出都会转换为十六进制实体.这是预期的行为吗?有没有办法将输出转换为UTF-8字符?
这是我所看到的一个例子:
INPUT
echo $text;
Run Code Online (Sandbox Code Playgroud)
OUTPUT
???? ????? ??????.
Run Code Online (Sandbox Code Playgroud)
INPUT
json_encode($text);
Run Code Online (Sandbox Code Playgroud)
OUTPUT
"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."
Run Code Online (Sandbox Code Playgroud) 在JavaScript中:
encodeURIComponent("©?") == "%C2%A9%E2%88%9A"
Run Code Online (Sandbox Code Playgroud)
是否有C#应用程序的等价物?对于我使用的转义HTML字符:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"&#" + ((int)m.Value[0]).ToString() + ";");
Run Code Online (Sandbox Code Playgroud)
但我不确定如何将匹配转换为JS使用的正确十六进制格式.例如这段代码:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));
Run Code Online (Sandbox Code Playgroud)
返回" %a9%221a"for "©?"而不是"%C2%A9%E2%88%9A".看起来我需要将字符串拆分为字节或其他东西.
编辑:这是一个Windows应用程序中,唯一可用的项目System.Web有:AspNetHostingPermission,AspNetHostingPermissionAttribute,和AspNetHostingPermissionLevel.
是否允许URI(特别是HTTP URL)包含一个或多个空格字符?如果必须对URL 进行编码,这+只是一个常用的约定,还是合法的替代方案?
特别是,有人可以指向一个RFC,表明必须编码带空格的URL 吗?
问题的动机:在对网站进行beta测试时,我注意到有些网址是用空格构建的.Firefox似乎做对了,让我感到惊讶!但我希望能够将开发人员指向RFC,以便他们觉得需要修复这些URL.
我试图使用java.io.FileReader读取一些文本文件并将它们转换为字符串,但我发现结果编码错误,根本不可读.
这是我的环境:
Windows 2003,操作系统编码:CP1252
Java 5.0
我的文件是UTF-8编码或CP1252编码,其中一些(UTF-8编码文件)可能包含中文(非拉丁文)字符.
我使用以下代码来完成我的工作:
private static String readFileAsString(String filePath)
throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
FileReader reader = new FileReader(filePath);
//System.out.println(reader.getEncoding());
BufferedReader reader = new BufferedReader(reader);
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用.我发现即使文本是UTF-8编码,FileReader的编码也是CP1252.但是java.io.FileReader的JavaDoc说:
此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的.
这是否意味着如果我使用FileReader,我不需要自己设置字符编码?但我目前确实得到了错误的编码数据,处理我的问题的正确方法是什么?谢谢.
Python将以下内容识别为定义文件编码的指令:
# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)
我确实在(-*- var: value -*-)之前看过这种指令.它从何而来?什么是完整的规范,例如,值可以包括空格,特殊符号,换行符,甚至-*-本身?
我的程序将编写纯文本文件,我想使用这种格式在其中包含一些元数据.