我正在研究一个应该与MMO游戏服务器通信的客户端.客户端正在使用unity3d.我从服务器获取JSON格式的数据,我尝试以UTF8编码获取数据:
string responseString = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8).ReadToEnd()
JSONObject JOBJ = new JSONObject(responseString);
Run Code Online (Sandbox Code Playgroud)
以及响应字符串内部的内容如下:
"\u0645\u0639\u062f\u0646 \u062a\u06cc\u062a\u0627\u0646\u06cc\u0648\u0645"
Run Code Online (Sandbox Code Playgroud)
然后我尝试从JSON中获取所需的utf8字符串数据:
string xy = JOBJ["name"].ToString();
byte[] utf = System.Text.Encoding.UTF8.GetBytes(xy);
string s2= System.Text.Encoding.UTF8.GetString(utf);
Run Code Online (Sandbox Code Playgroud)
问题是当我记录字符串时:
Debug.Log("Jproperty :" + s2);
Run Code Online (Sandbox Code Playgroud)
我得到的只是这样的\ u secuences:
"\u0645\u0639\u062f\u0646 \u062a\u06cc\u062a\u0627\u0646\u06cc\u0648\u0645"
Run Code Online (Sandbox Code Playgroud)
如果我首先在xy中输入相同的结果,我会得到很好的结果.另外我应该提一下,虽然我认为s2.length应该是11,但它是66.
任何人都可以告诉我我的代码有什么问题?
我一直试图开始使用Phalcon,但是我已经被困了几天试图查询我的数据库.如果我找不到解决这个问题的方法,我将不得不继续前进.
目标表使用inno-db并且是utf-8编码的.表有两列:一列是索引值,另一列是单个(唯一)东亚字符.当尝试使用utf-8编码的中文字符检索记录时,Phalcon返回0条记录.此外,在使用索引值检索记录时,相应的字符值将作为问号返回(常规问号,而不是浏览器用作无法识别字符的占位符的问号).
$characters = Characters::find("indCharacter = ?");
Run Code Online (Sandbox Code Playgroud)
返回此错误:
"PhalconException: Scanning error before '??' when parsing: SELECT [Characters].* FROM [Characters] WHERE indCharacter = ? (64)"
Run Code Online (Sandbox Code Playgroud)
在实际字符0周围使用单引号返回结果.
我使用命令行,phpmyadmin和workbench运行完全相同的查询,所有这些查询都在相同的环境中.所有正确返回的记录.
我还仔细检查了原始查询值是否为utf-8编码,并且表中的所有数据都是utf-8编码的.
Phalcon:1.2.6
Php:5.4.11
使用C++ 11,我如何从UTF-8编码std::string中获取文本中每个字符的Unicode值uint32_t?
就像是:
void f(const std::string &utf8_str)
{
for(???) {
uint32_t code = ???;
/* Do my stuff with the code... */
}
}
Run Code Online (Sandbox Code Playgroud)
假设主机系统区域设置是UTF-8有帮助吗?C++ 11为此任务提供了哪些标准库工具?
据我所知,UTF-16和UTF-32之间的主要区别在于UTF-32每个字符总是四个字节,而UTF-16有时是一个字节,有时每个字符有两个字节.这使得UTF-16具有比UTF-32占用更少内存的优势,但UTF-32具有第n个字符的恒定时间访问的优点.
我的问题是,如果你能用UTF-16中最多两个字节表示每个unicode字符,那么为什么不存在总是使用两个字节来编码每个字符的格式呢?这种格式虽然比UTF-16稍贵一些内存,但通过在使用一半内存时允许恒定时间访问,将严格优于UTF-32.
我的误会是什么?
我正在尝试转换正在从文件中读取的字符串.我不知道文件是如何制作或创建的(编码方式),但这是交易:我得到这个字符串:
"operaci n"应该是"operación"(西班牙语操作).
我在尝试阅读文件时尝试过更改编码:
using (StreamReader sr = new StreamReader("file.txt", false, Encoding.ASCII));
using (StreamReader sr = new StreamReader("file.txt", false, Encoding.UTF8));
using (StreamReader sr = new StreamReader("file.txt", false, Encoding.UTF7));
using (StreamReader sr = new StreamReader("file.txt", false, Encoding.UTF32));
using (StreamReader sr = new StreamReader("file.txt", false, Encoding.Unicode));
Run Code Online (Sandbox Code Playgroud)
并且在保存文件时(而不是StreamWriter).我也尝试了一些我在这里发现的奇怪的编码和我自己的一些实验:
new ASCIIEncoding().GetString(Encoding.Convert(Encoding.UTF8, Encoding.Default, byteArray))
"operaci?n"
new ASCIIEncoding().GetString(Encoding.Convert(Encoding.UTF8, Encoding.Unicode, byteArray))
"F\0o\0p\0e\0r\0a\0c\0i\0??n\0"
new ASCIIEncoding().GetString(Encoding.Convert(Encoding.UTF8, Encoding.UTF32, byteArray))
"F\0\0\0o\0\0\0p\0\0\0e\0\0\0r\0\0\0a\0\0\0c\0\0\0i\0\0\0??\0\0n\0\0\0"
new ASCIIEncoding().GetString(Encoding.Convert(Encoding.UTF8, Encoding.UTF7, byteArray))
"operaci+//0-n"
new ASCIIEncoding().GetString(Encoding.Convert(Encoding.UTF8, Encoding.ASCII, byteArray))
"operaci?n"
new ASCIIEncoding().GetString(Encoding.Convert(Encoding.UTF8, Encoding.BigEndianUnicode, byteArray))
"\0F\0o\0p\0e\0r\0a\0c\0i??\0n\0"
new ASCIIEncoding().GetString(Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding(65001), byteArray))
"operaci???n" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用编码将重音字符插入到mysql表中utf8_general_ci.
这是一个我想插入的简单字符串:
Porto leça da palmeira
Run Code Online (Sandbox Code Playgroud)
要插入该字符串,我将以这种方式使用php:
$string = "Porto leça da palmeira";
$id = "xxxx";
$sql = "INSERT INTO city_translates (id,city) VALUES ('$id','$string')";
$dbh = new PDO("mysql:host.....");
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->query($sql);
Run Code Online (Sandbox Code Playgroud)
当我尝试从MysqlWorkBench该字符串访问时,它已以这种方式存储:
Porto - Le?Ãa da Palmeira
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用utf8_encode如下:
$string = utf8_encode($string);
Run Code Online (Sandbox Code Playgroud)
它将以这种方式存储:
Porto - Le?ßa da Palmeira
Run Code Online (Sandbox Code Playgroud)
我怎么解决?可能是我的错误?
谢谢!
目前似乎为了在门户消息中显示UTF-8字符,您需要先解码它们.
以下是我的代码中的代码段:
self.context.plone_utils.addPortalMessage(_(u'This document (%s) has already been uploaded.' % (doc_obj.Title().decode('utf-8'))))
Run Code Online (Sandbox Code Playgroud)
如果Plone中的标题已经是UTF-8编码,则字符串是unicode字符串,而下划线函数由i18ndude处理,我没有看到我们特别需要解码utf-8的原因.通常我忘记添加它并记住一旦我得到UnicodeError.
有什么想法吗?这是addPortalMessage的预期行为吗?导致问题的是i18ndude吗?
我有一个字符串列表,其中包含与拉丁文字符类似的各种不同字符,我从使用urllib2下载的网站上获取这些字符串.该网站采用utf-8编码.但是,在尝试了很多变化后,我无法弄清楚如何将其转换为简单的ASCII等价物.例如,我所拥有的一个字符串是:
u'Atl\xc3\xa9tico Madrid'
Run Code Online (Sandbox Code Playgroud)
在纯文本中,它是"马德里竞技",我想要的是将其改为"马德里竞技".如果我在这上面使用简单的unidecode,我会得到"AtlA(c)tico Madrid".我究竟做错了什么?
在Windows 2008服务器上使用web2py我有以下问题
我正在从json创建csv文档,当写入列表到文件时,我得到以下错误.它在csv writerow上崩溃了
<type 'exceptions.UnicodeEncodeError'> 'ascii' codec can't encode character u'\\u010c'
Run Code Online (Sandbox Code Playgroud)
它在我的电脑上运行正常.Windows 7但在服务器上我有编码问题
有什么建议?谢谢
我创建文件的代码如下
dataDict = json.loads(data.replace("'", "\""))
path = path
scriptName = os.path.join(path, id + 'script.txt')
file = open(scriptName, 'wb')
output = csv.writer(file, delimiter='\t')
##Month hours
file.write("begin month_hours \r\n")
file.write("delavec mesec month_hours_min month_hours_max\r\n")
for rec in dataDict["mandatory"]:
output.writerow(rec)
file.write("\r\nend month_hours \r\n")
Run Code Online (Sandbox Code Playgroud) 我在编程示例中遇到了以下方法.这真的是加密算法吗?或者它更像是十六进制散列/不可逆编码算法?我看到使用按位移位和按位和使得我相信该方法具有数据丢失并且是不可逆的十六进制编码算法.
private string Encrypt(string key, string message)
{
string result = "";
var hexValues = "0123456789abcdef";
for (int i = 0, j = 0; i < message.Length; i++)
{
var a = (Int32)message[i];
var b = (Int32)key[j] & 10;
var encChar = a ^ b;
if (++j == key.Length)
{
j = 0;
}
result += hexValues[(encChar >> 4) & 15];
result += hexValues[encChar & 15];
}
return result;
}
Run Code Online (Sandbox Code Playgroud)