标签: utf-8

UTF-8"可变宽度编码"如何工作?

unicode标准中有足够的代码点,你需要4个字节来存储它们.这就是UTF-32编码所做的.然而,UTF-8编码通过使用称为"可变宽度编码"的东西以某种方式将这些压缩到更小的空间.

实际上,它设法在一个字节中代表US-ASCII的前127个字符,它看起来与真正的ASCII完全相同,因此您可以将许多ascii文本解释为UTF-8而不对其执行任何操作.干净的把戏.那么它是怎样工作的?

我将在这里提出并回答我自己的问题,因为我只是做了一些阅读以弄清楚它并且我认为它可能会节省其他人一些时间.如果我有一些错误,也许有人可以纠正我.

unicode utf-8 character-encoding multibyte

103
推荐指数
2
解决办法
2万
查看次数

在.NET中将对象序列化为UTF-8 XML

为简洁起见,删除了适当的对象处理,但如果这是在内存中将对象编码为UTF-8的最简单方法,我会感到震惊.必须有一种更简单的方法吗?

var serializer = new XmlSerializer(typeof(SomeSerializableObject));

var memoryStream = new MemoryStream();
var streamWriter = new StreamWriter(memoryStream, System.Text.Encoding.UTF8);

serializer.Serialize(streamWriter, entry);

memoryStream.Seek(0, SeekOrigin.Begin);
var streamReader = new StreamReader(memoryStream, System.Text.Encoding.UTF8);
var utf8EncodedXml = streamReader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

c# xml utf-8 xml-serialization

103
推荐指数
4
解决办法
13万
查看次数

UnicodeDecodeError:'ascii'编解码器无法解码位置1的字节0xef

我在尝试将字符串编码为UTF-8时遇到了一些问题.我尝试过很多东西,包括使用string.encode('utf-8')unicode(string),但是我得到了错误:

UnicodeDecodeError:'ascii'编解码器无法解码位置1的字节0xef:序数不在范围内(128)

这是我的字符串:

(?????)?
Run Code Online (Sandbox Code Playgroud)

我不知道出了什么问题,任何想法?

编辑:问题是打印字符串不正确显示.此外,当我尝试转换它时出现此错误:

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

python unicode utf-8

103
推荐指数
6
解决办法
31万
查看次数

C#将字符串从UTF-8转换为ISO-8859-1(Latin1)H

我已经搜索了这个主题,我看了每个答案,但我仍然没有得到它.

基本上我需要将UTF-8字符串转换为ISO-8859-1,我使用以下代码:

Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
string msg = iso.GetString(utf8.GetBytes(Message));
Run Code Online (Sandbox Code Playgroud)

我的源字符串是

Message = "ÄäÖöÕõÜü"
Run Code Online (Sandbox Code Playgroud)

但不幸的是我的结果字符串变成了

msg = "�ä�ö�õ�ü
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

.net c# encoding utf-8 iso-8859-1

97
推荐指数
5
解决办法
25万
查看次数

如何使MySQL正确处理UTF-8

其中一个答复的一个问题,我问昨天建议我要确保我的数据库能正确处理UTF-8字符.我怎么能用MySQL做到这一点?

mysql utf-8

95
推荐指数
5
解决办法
21万
查看次数

UnicodeDecodeError:'ascii'编解码器无法解码位置2中的字节0xd1:序数不在范围内(128)

我正在尝试使用一个非常大的数据集,其中包含一些非标准字符.根据工作规范,我需要使用unicode,但我很困惑.(并且很可能做错了.)

我使用以下命令打开CSV:

 15     ncesReader = csv.reader(open('geocoded_output.csv', 'rb'), delimiter='\t', quotechar='"')
Run Code Online (Sandbox Code Playgroud)

然后,我尝试用以下代码对其进行编码:

name=school_name.encode('utf-8'), street=row[9].encode('utf-8'), city=row[10].encode('utf-8'), state=row[11].encode('utf-8'), zip5=row[12], zip4=row[13],county=row[25].encode('utf-8'), lat=row[22], lng=row[23])
Run Code Online (Sandbox Code Playgroud)

我正在编码除了lat和lng之外的所有内容,因为那些需要发送到API.当我运行程序将数据集解析为我可以使用的内容时,我得到以下Traceback.

Traceback (most recent call last):
  File "push_into_db.py", line 80, in <module>
    main()
  File "push_into_db.py", line 74, in main
    district_map = buildDistrictSchoolMap()
  File "push_into_db.py", line 32, in buildDistrictSchoolMap
    county=row[25].encode('utf-8'), lat=row[22], lng=row[23])
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 2: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我想我应该告诉你我正在使用python 2.7.2,这是django 1.4上构建应用程序的一部分.我已经阅读了几个关于这个主题的帖子,但似乎都没有直接适用.任何帮助将不胜感激.

您可能还想知道导致该问题的一些非标准字符是Ñ并且可能是É.

python django utf-8

95
推荐指数
6
解决办法
26万
查看次数

使用StringWriter进行XML序列化

我正在寻找一种简单的方法来序列化对象(在C#3中).

我用Google搜索了一些例子,并得出了类似的结果:

MemoryStream memoryStream = new MemoryStream ( );
XmlSerializer xs = new XmlSerializer ( typeof ( MyObject) );
XmlTextWriter xmlTextWriter = new XmlTextWriter ( memoryStream, Encoding.UTF8 );
xs.Serialize ( xmlTextWriter, myObject);
string result = Encoding.UTF8.GetString(memoryStream .ToArray());
Run Code Online (Sandbox Code Playgroud)

读完这个问题之后我问自己,为什么不使用StringWriter?看起来容易得多.

XmlSerializer ser = new XmlSerializer(typeof(MyObject));
StringWriter writer = new StringWriter();
ser.Serialize(writer, myObject);
serializedValue = writer.ToString();
Run Code Online (Sandbox Code Playgroud)

另一个问题是,第一个示例生成的XML我不能只写入SQL Server 2005 DB的XML列.

第一个问题是:在我之后需要它作为字符串时,是否有理由不使用StringWriter序列化Object?在google搜索时,我从未找到使用StringWriter的结果.

第二个当然是:如果你不应该使用StringWriter(无论出于何种原因),这将是一个好的和正确的方法?


加成:

正如两个答案已经提到的那样,我将进一步讨论XML到DB的问题.

写入数据库时​​,我得到以下异常:

System.Data.SqlClient.SqlException:XML解析:第1行,字符38,无法切换编码

对于字符串

<?xml version="1.0" encoding="utf-8"?><test/>
Run Code Online (Sandbox Code Playgroud)

我从XmlTextWriter中获取了字符串,然后将xml放在那里.这个没有用(手动插入DB).

之后我尝试使用encoding ="utf-16"手动插入(只是编写INSERT INTO ...),这也失败了.删除编码完全有效.在那个结果之后我切换回StringWriter代码并且瞧 - 它工作了.

问题:我真的不明白为什么.

在Christian Hayter:通过这些测试,我不确定我是否必须使用utf-16来写入数据库.不会将编码设置为UTF-16(在xml标签中)吗?

c# xml sql-server utf-8 xml-serialization

94
推荐指数
4
解决办法
14万
查看次数

将InputStream读取为UTF-8

我试图text/plain通过互联网逐行读取文件.我现在的代码是:

URL url = new URL("http://kuehldesign.net/test.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
LinkedList<String> lines = new LinkedList();
String readLine;

while ((readLine = in.readLine()) != null) {
    lines.add(readLine);
}

for (String line : lines) {
    out.println("> " + line);
}
Run Code Online (Sandbox Code Playgroud)

该文件test.txt包含¡Hélló!,我正在使用它来测试编码.

当我查看OutputStream(out)时,我将其视为> ¬°H?©ll??!.我不相信这是一个问题,OutputStream因为我可以out.println("é");没有问题.

阅读的任何想法都形成InputStreamUTF-8?谢谢!

java inputstream utf-8

94
推荐指数
3
解决办法
19万
查看次数

我应该在Python 3中使用编码声明吗?

默认情况下,Python 3对源代码文件使用UTF-8编码.我还应该在每个源文件的开头使用编码声明吗?喜欢# -*- coding: utf-8 -*-

python encoding utf-8 python-3.x

93
推荐指数
2
解决办法
3万
查看次数

如何在ggplot2中使用希腊符号?

我的类别需要用希腊字母命名.我正在使用ggplot2它,它可以很好地处理数据.不幸的是,我无法弄清楚如何将这些希腊符号放在x轴(刻度线)上,并使它们出现在图例中.有什么办法吗?

更新:我看了一下链接,然而,没有很好的方法来描述我想要做的事情.

unicode graphics r utf-8 ggplot2

92
推荐指数
4
解决办法
7万
查看次数