Articles of 语言环境

如何检查一个语言环境是否是UTF-8?

我正在与Yocto合作为ARM设备(i.MX 6Quad Processors)创buildembedded式Linux发行版。 我已经用variablesconfiguration了所需语言环境的列表: IMAGE_LINGUAS = "de-de fr-fr en-gb en-gb.iso-8859-1 en-us en-us.iso-8859-1 zh-cn" 因此,我已经获得了包含以下文件夹的文件系统: root@lam_icu:/usr/lib/locale# cd /usr/share/locale/ root@lam_icu:/usr/share/locale# ls -la total 0 drwxr-xr-x 6 root root 416 Nov 17 2016 . drwxr-xr-x 30 root root 2056 Nov 17 2016 .. drwxr-xr-x 4 root root 296 Nov 17 2016 de drwxr-xr-x 3 root root 232 Nov […]

写入文件时的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 我该怎么做?

升压语言环境的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。 为什么我没有看到它,以及如何产生我想要的结果?

在Windows下使用任何语言环境的平日

我试图得到一周的一天,并在任何地区一直工作。 在与拉丁字母的地方,一切都很好。 Sys.getlocale() ## [1] "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252" weekdays(Sys.Date()) ## [1] "Tuesday" 我有其他地区的两个相关的问题。 如果我设置 Sys.setlocale("LC_ALL", "Arabic_Qatar") ## [1] "LC_COLLATE=Arabic_Qatar.1256;LC_CTYPE=Arabic_Qatar.1256;LC_MONETARY=Arabic_Qatar.1256;LC_NUMERIC=C;LC_TIME=Arabic_Qatar.1256" 那么我有时(正确)得到 weekdays(Sys.Date()) ## [1] "الثلاثاء 有时得到 weekdays(Sys.Date()) ## [1] "ÇáËáÇËÇÁ" 取决于我的设置。 问题是,我无法弄清楚是什么导致了差异。 我认为这可能是与getOption("encoding") ,但我已经明确设置options(encoding = "native.enc")和options(encoding = "UTF-8") ,并没有什么区别。 我已经尝试了R的几个最新版本,并且所有这些问题都是一致的。 目前,在R GUI中string显示正确,但在使用IDE(Architect和RStudiotesting)时不正确。 我应该设置什么来确保工作日始终正确显示? 知道weekdays(Sys.Date())与format(as.POSIXlt(Sys.Date()), "%A")是等价的,它调用一个内部format.POSIXlt方法。 其次,改变所有的语言环境似乎是矫枉过正的。 我以为我应该能够设置时间选项。 但是,如果我设置了区域设置的单个组件,则weekdays返回一串问号。 for(category in c("LC_TIME", "LC_CTYPE", "LC_COLLATE", "LC_MONETARY")) […]

枚举Windows纸张大小

我可以使用当前的Locale纸张大小 GetLocaleStr(LCID,LOCALE_IPAPERSIZE,IntToStr(DMPAPER_A4)) 其中LOCALE_IPAPERSIZE = $100A 但有没有一种方法来枚举所有的纸张大小与他们的名字?