Articles of 语言环境

写入文件时的UnicodeEncodeError

我有一个python脚本,在我的本地机器(OS X)上效果很好,但是当我将它复制到服务器(Debian)时,它不能按预期工作。 该脚本读取一个xml文件并以新格式打印内容。 在我的本地机器上,我可以使用stdout将脚本运行到terminal或文件(即> myFile.txt ),两者都可以正常工作。 然而,在服务器上( ssh ),当我打印到terminal一切正常,但打印到文件(这是我真正需要)给UnicodeEncodeError: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128) 。 所有的文件都是utf-8编码,并且在魔术评论中声明了utf-8。 如果我在列表中打印str对象(这是我通常用来获取编码问题的一个技巧),它也会引发同样的错误。 如果使用print( x.encode('utf-8') ) ,那么它会打印代码样式的位(例如b'1' b'\xd0\x9a\xd0\xb0\xd0\xbc\xd0\xb0' ) 。 如果我在shell中$ export PYTHONIOENCODING=utf-8 (如某些SOpost中所build议的),那么我得到一个二进制文件: 1 <D0><9A><D0><B0><D0><BC><D0><B0> 。 我已经检查了所有的localevariables,并且相关的variables与我在本地机器上的variables相匹配。 我可以简单地在本地处理文件并上传,但我真的很想了解这里发生的事情。 由于Python代码在一台计算机上工作,我不确定它是相关的,但我在下面添加它: # -*- encoding: utf-8 -*- import sys, xml.etree.ElementTree as ET corpus = ET.parse('file.xml') […]

Locale.getDefault()总是返回en

unix机器上的服务器总是使用en作为默认语言环境。 以下是区域设置输出 LANG=en_US LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C" LC_ALL=C 我只是不明白,如果LANG设置正确,那么为什么服务器以en语言环境启动。

Linux / Python:编码用于打印的unicodestring

我有一个相当大的Python 2.6应用程序,大量的打印语句洒了。 我在整个使用Unicodestring,它通常很好。 但是,如果我redirect的应用程序的输出(如“myapp.py> output.txt”),那么我偶尔会得到这样的错误: UnicodeEncodeError: 'ascii' codec can't encode character u'\xa1' in position 0: ordinal not in range(128) 我想如果有人把LOCALE设置为ASCII,也会出现同样的问题。 现在,我完全理解这个错误的原因。 在我的Unicodestring中有不能用ASCII编码的字符。 很公平。 但是我希望我的python程序尽最大努力去打印可以理解的东西,可能是跳过可疑字符或用Unicode标识replace它们。 这个问题一定是常见的…处理这个问题的最佳做法是什么? 我更喜欢一个解决scheme,让我继续使用普通的“打印”,但我可以修改所有事件,如果有必要。 PS:我现在已经解决了这个问题。 解决scheme既不是给出的答案。 我使用了http://wiki.python.org/moin/PrintFails中给出的方法,由ChrisJ在其中一个注释中给出。 也就是说,我用一个包含正确参数的unicode编码的包装来replacesys.stdout。 工作得很好。

UNIXsorting忽略空格

这是一个简单的问题。 给定一个文件txt : ab ac aa 当调用sort txt ,我得到: aa ab ac 换句话说,这是不正确的sorting,这种删除/忽略空格! 我期望这是sort -i的行为,但它发生有或没有-i标志。 我想获得“正确的”sorting: aa ac ab 我该怎么做?

Java 7默认语言环境

我刚刚安装了jre7,我很惊讶地发现我的默认语言环境现在是en_US。 用jre6它是de_CH。 与jre7有什么不同? 缺省语言环境不再是操作系统的一个吗? (顺便说一下,我使用Windows7) Thx为您的答案。 编辑:我已经看到Category.FORMAT的语言环境是“旧”(de_CH)。 Category.DISPLAY的语言环境采用操作系统语言的语言(在Windows中,这在控制面板>区域和语言>键盘和语言>显示语言中完成)以及来自…的条件? 看起来不同的是“ user.country ”属性。 随着Java6我得到“CH”和Java7我得到“美国”。

常见的Windows编译器上有哪些std :: locale名称可用?

标准对于什么是有效的语言环境名称几乎没有任何规定; 只有通过一个无效的区域设置名称导致std::runtime_error 。 常见的Windows编译器(如MSVC,MinGW和ICC)上可以使用哪些语言环境名称?

奇怪的字符:R和Windows语言环境的交互?

WinXP-x32,R-2.13.0 亲爱的名单, 我有一个问题,(我认为)涉及Windows和R之间的交互。 我试图用夏威夷群岛上的数据刮一张桌子。 这是我的R代码: library(XML) u <- "http://en.wikipedia.org/wiki/Hawaii" tables <- readHTMLTable(u) Islands <- tables[[5]] 输出是(第一组列): Island Nickname > > Islands Island Nickname > > Location 1 HawaiÊ»i[7] The Big 岛19°34°N 155°30°/ 19.567°N 155.5°/ 19.567; -155.5 2毛伊岛[8]谷岛20°48“N 156°20”/ 20.8°N 156.333°W / 20.8; -156.333 3卡霍·奥拉韦[9]目标岛20°33'N 156°36°/°C 20.55°N 156.6°/ 20.55°; -156.6 4拉涅我[10]菠萝岛20°50“N 156°56”/ 20.833°N 156.933°/ 20.833; -156.933 […]

升压语言环境的string转换:在Windows和Linux上的不同行为

这是我的示例代码: #pragma execution_character_set("utf-8") #include <boost/locale.hpp> #include <boost/algorithm/string/case_conv.hpp> #include <iostream> int main() { std::locale loc = boost::locale::generator().generate(""); std::locale::global(loc); #ifdef MSVC std::cout << boost::locale::conv::from_utf("grüßen vs ", "ISO8859-15"); std::cout << boost::locale::conv::from_utf(boost::locale::to_upper("grüßen"), "ISO8859-15") << std::endl; std::cout << boost::locale::conv::from_utf(boost::locale::fold_case("grüßen"), "ISO8859-15") << std::endl; std::cout << boost::locale::conv::from_utf(boost::locale::normalize("grüßen", boost::locale::norm_nfd), "ISO8859-15") << std::endl; #else std::cout << "grüßen vs "; std::cout << boost::locale::to_upper("grüßen") << std::endl; […]

打印所有std :: locale名称(Windows)

我的程序检查德语的大写字母。 #include <iostream> #include <boost/algorithm/string/classification.hpp> #include <boost/locale.hpp> using namespace std; int main() { locale::global(locale("Germany_german")); //locale::global(locale("de_DE.UTF-8")); //Also tried "de_DE.UTF-8", but does not work string str1 = "über"; cout << boolalpha << any_of(str1.begin(), str1.end(), boost::algorithm::is_upper()) << endl; string str2 = "Ää"; cout << boolalpha << any_of(str2.begin(), str2.end(), boost::algorithm::is_upper()) << endl; return 0; } 程序崩溃与控制台上的错误 terminate called after […]

C ++ printf与%f但本地化为用户的国家

我正在使用以下C ++语法在Windows平台上输出浮点值: printf("%.2f", 1.5); 如果我在英文用户帐户上运行,效果很好。 我的假设是,如果我运行它,说法语用户帐户,输出将是1,50而不是1.50。 为什么我没有看到它,以及如何产生我想要的结果?