Tag: unicode

WChars,编码,标准和可移植性

以下可能不符合SO的问题; 如果出界,请随时告诉我走开。 这里的问题基本上是,“我是否正确理解C标准,这是正确的方式去做事情? 我想要澄清,确认和更正我对C中字符处理(以及C ++和C ++ 0x)的理解。 首先,一个重要的观察: 可移植性和序列化是正交的概念。 便携式的东西是像C, unsigned int , wchar_t 。 可串行化的东西是像uint32_t或UTF-8的东西。 “便携式”意味着您可以重新编译相同的源代码,并在每个支持的平台上获得工作结果,但二进制表示可能完全不同(甚至不存在,例如,TCP-over-carrier鸽子)。 另一方面,可序列化的东西总是具有相同的表示forms,例如我可以在Windows桌面,手机或牙刷上读取的PNG文件。 便携式的东西是内部的,可序列化的东西处理I / O。 便携式的东西是types安全的,可序列化的东西需要types的双关语。 </前导> 在C中的字符处理中,有两组事物分别涉及到可移植性和序列化: wchar_t , setlocale() , mbsrtowcs() / wcsrtombs() : C标准没有提到“编码” 。 实际上,对任何文本或编码属性都是完全不可知的。 它只是说“你的入口点是main(int, char**) ;你得到一个typeswchar_t ,它可以容纳你所有系统的字符;你可以读取input的字符序列并使它们变成可用的string,反之亦然。 iconv()和UTF-8,16,32:一个函数/库在定义明确的固定编码之间进行转码。 所有由iconv处理的编码都被普遍理解和同意,只有一个例外。 C的可移植的,编码不可知的世界与其wchar_t可移植字符types和确定性外部世界之间的桥梁是WCHAR-T和UTF之间的iconv转换 。 所以,我应该总是将我的string内部存储在一个编码无关的wstring中,通过wcsrtombs()与CRT连接,并使用iconv()进行序列化? 概念: my program <– wcstombs — /==============\ — iconv(UTF8, WCHAR_T) –> […]

如何获得str.translate使用Unicodestring?

我有以下代码: import string def translate_non_alphanumerics(to_translate, translate_to='_'): not_letters_or_digits = u'!"#%\'()*+,-./:;<=>?@[\]^_`{|}~' translate_table = string.maketrans(not_letters_or_digits, translate_to *len(not_letters_or_digits)) return to_translate.translate(translate_table) 这对于非Unicodestring非常有用: >>> translate_non_alphanumerics('<foo>!') '_foo__' 但unicodestring失败: >>> translate_non_alphanumerics(u'<foo>!') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 5, in translate_non_alphanumerics TypeError: character mapping must return integer, None or unicode 对于str.translate()方法的Python 2.6.2文档中的“Unicode对象”的段落,我无法理解。 我如何使这个工作的Unicodestring?

如何统计C中的Unicodestring中的字符

比方说,我有一个string: char theString[] = "你们好āa"; 考虑到我的编码是utf-8,这个string是12个字节长(三个汉字字符是三个字节,拉丁字符与macron是两个字节,而'a'是一个字节: strlen(theString) == 12 我如何计算字符的数量? 我怎样才能做相当于下标: theString[3] == "好" 我怎么能切片,并猫这样的string?

我需要知道关于Unicode的什么?

作为一名应用程序开发人员,我需要了解Unicode吗?

为什么Java允许在源代码中转义unicode字符?

我最近了解到 ,在Java源代码中,Unicode不仅可以用作Unicode字符(例如double \u03C0 = Math.PI; ),还可以用作转义序列(例如double \u03C0 = Math.PI; )。 第一个变体对我来说很有意义 – 它允许程序员用自己select的国际语言来命名variables和方法。 但是,我没有看到第二种方法的实际应用。 以下是一些用于说明使用情况的代码段,使用Java SE 6和NetBeans 6.9.1进行了testing: 此代码将打印出3.141592653589793 public static void main(String[] args) { double π = Math.PI; System.out.println(\u03C0); } 说明:π和\ u03C0是相同的Unicode字符 这段代码不会打印出任何东西 public static void main(String[] args) { double π = Math.PI; /\u002A System.out.println(π); /* a comment */ } 说明:上面的代码实际上编码为: public static void […]

什么时候我们必须在SQL Server中使用NVARCHAR / NCHAR而不是VARCHAR / CHAR?

当我们必须使用Unicodetypes时,是否有规则? 我已经看到,大多数欧洲语言(德语,意大利语,英语,…)在VARCHAR列的同一个数据库中都很好。 我正在寻找像这样的东西: 如果你有中文 – >使用NVARCHAR 如果你有德语和阿拉伯语 – >使用NVARCHAR 怎么样的服务器/数据库的整理? 我不想像这里所提到的那样总是使用NVARCHAR varchar和nvarchar SQL Server数据types之间的主要性能区别是什么?

获取一个字符的Unicode值

有什么办法在Java中,以便我可以得到任何字符的Unicode等价物? 例如 假设一个方法getUnicode(char c) 。 调用getUnicode('÷')应返回\u00f7 。

使用'使用utf8' 给我“宽印字”

如果我运行下面的Perl程序: perl -e 'use utf8; print "鸡\n";' 我得到这个警告: Wide character in print at -e line 1. 如果我运行这个Perl程序: perl -e 'print "鸡\n";' 我没有得到警告。 我认为use utf8需要在Perl脚本中使用UTF-8字符。 为什么这不起作用,我该如何解决? 我正在使用Perl 5.16.2。 我有同样的问题,如果这是在一个文件中,而不是在命令行上的单线程。

我应该如何为最终的64位编译器准备我的32位Delphi程序?

可能重复: 如何在迁移到Delphi 2010和Unicode时为64位做准备 因为我相信64位的 Delphi编译器很快就会出现,所以我很好奇,如果有人知道现在使用64位编译器,现在32位的程序是什么样的编译和工作,没有任何改变。 如果有一个普遍的规则,我们应该在我们的旧程序中系统地做出什么样的改变来编译为64位 ? 当64位编译器突然在这里的时候准备好是很好的… 任何build议将不胜感激。

使用FileWriter(Java)以UTF-8编写文件?

我有下面的代码,但是,我希望它作为一个UTF-8文件来处理外来字符。 有没有办法做到这一点,有一些需要有一个参数? 我真的很感激你的帮助。 谢谢。 try { BufferedReader reader = new BufferedReader(new FileReader("C:/Users/Jess/My Documents/actresses.list")); writer = new BufferedWriter(new FileWriter("C:/Users/Jess/My Documents/actressesFormatted.csv")); while( (line = reader.readLine()) != null) { //If the line starts with a tab then we just want to add a movie //using the current actor's name. if(line.length() == 0) continue; else if(line.charAt(0) == '\t') { […]