- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 C++ 中遇到“元音变音”(字母 ä、ü、ö、...)和 ifstream 的问题。
我使用 curl 下载 html 页面,使用 ifstream 逐行读取下载的文件并解析其中的一些数据。一切顺利,直到我有如下一行:
te="Olimpija Laibach - Tromsö";
te="Burghausen - Münster";
我的代码解析这些行并将其输出如下:
Olimpija Laibach vs. Troms?
Burghausen vs. M?nster
诸如直接从代码中输出元音变音之类的事情:
cout << "öäü" << endl; // This works fine
我的代码看起来像这样:
ifstream fin("file");
while(!(fin.eof())) {
getline(fin, line, '\n');
int pos = line.find("te=");
if(pos >= 0) {
pos = line.find(" - ");
string team1 = line.substr(4,pos-4);
string team2 = line.substr(pos+3, line.length()-pos-6);
cout << team1 << " vs. " << team2 << endl;
}
}
编辑: 奇怪的是相同的代码(唯一改变的是源代码和定界符)适用于另一个文本输入文件(相同的过程:使用 curl 下载,使用 ifstream 读取) .像下面这样解析输出一行是没有问题的:
<span id="...">Fernwärme Vienna</span>
最佳答案
fin
中嵌入的语言环境是什么?在您显示的代码中,它会是全局区域设置,如果您没有重置它,则为 "C"
。
如果您身处盎格鲁-撒克逊世界之外的任何地方——以及弦乐你的表现表明你是——你做的第一件事之一main
应该是
std::locale::global( std::locale( "" ) );
这设置了全局区域设置(因此设置了任何流的默认区域设置稍后打开)到周围环境中正在使用的语言环境。(形式上,实现定义的本地环境,但在练习,无论用户使用什么。)在 "C"
语言环境中,编码几乎总是 ASCII; ASCII 不识别变音符号,根据按照标准,输入中的非法编码应替换为实现定义的字符(IIRC——已经有一段时间了我实际上已经重读了这一部分)。在输出中,当然,你不是应该有任何未知字符,所以实现不检查它们,然后通过。
由于 std::cin
等在您有机会设置全局语言环境,您必须专门为它们注入(inject) std::locale( "")
。
如果这不起作用,您可能必须找到一些特定的语言环境使用。
关于C++ ifstream 和 "umlauts",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11608790/
我检索一个流。一切正常,但 Umlaute (ä,ö,ü,ß) 的编码除外。 什么是 NäüßÖ´sas so viele Umlaute 成为 NäüÃôsas so viele Umlau
我需要比较德语语言中的两个字符串,以检查它们是否相等并且仅在元音变音的使用上有所不同。例如。 “Jörg”应与“Joerg”相同。 所以我尝试了: var ci = new CultureInfo("
这个问题在这里已经有了答案: Character-encoding problem with string literal in source code (1 个回答) 3个月前关闭。 我正在尝试编写
我有一个从 sqlite 数据库获取数据(国家/地区列表)的应用程序。这些国家/地区采用德语并包含变音符号,例如 Österreich。我想获取按名称排序的国家/地区,并希望 Österreich 靠
我正在尝试“尝试”一些 REST API 和 Java 代码。 因为我主要使用德语,所以我已经设法让 Apache HTTP 客户端使用 UTF-8 编码,以确保以正确的方式处理“元音变音”。 我仍然
我在使用 openxml 时遇到字符元音变音的问题。字符串中的每个字符都使用 Arial,但 ä 使用 Calibri。我真的不知道为什么。 有人可以帮助我吗? 这是我的代码: Doc
我在 C++ 中遇到“元音变音”(字母 ä、ü、ö、...)和 ifstream 的问题。 我使用 curl 下载 html 页面,使用 ifstream 逐行读取下载的文件并解析其中的一些数据。一切
months = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktob
我正在使用带有简单直接代码的 symfony,试图将任何特殊字符(如 ä Ä ö Ö ü Ü)更改为 a A o O u U。我尝试了所有我能找到的方法 归一化器 echo \Normalizer::
这有效: echo preg_replace("/TesT/i","FOUND","TEST"); // works as expected prints FOUND 为什么下面这个不起作用?在我的项
这有效: echo preg_replace("/TesT/i","FOUND","TEST"); // works as expected prints FOUND 为什么下面这个不起作用?在我的项
我对 JSoup 库的编码行为有一些疑问。 我想解析网页的内容,因此我必须插入一些人名,其中还可以包含德语变音符号如 ä、ö 等。 这是我使用的代码: doc = Jsoup.parse(new UR
我知道如何使用(简单的)key=function 自定义排序。但是,如果我需要更复杂的 key= 函数,该怎么做。我在整理它时遇到了问题。 这是片段:在第一个示例中,我使用 key=locale.st
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: C++ source in unicode 刚刚在项目中发现了这行代码: string überwachun
我有以下 XML: Brandenburg Brandenburg Brandenburg
我想使用\w 通配符过滤字符串,但遗憾的是它不包含变音符号。 $i = "Die Höhe"; $x = preg_replace("/[^\w\s]/","",$i); echo $x; //
我有一个看起来像这样的字符串,例如 Lübeck Nürnberg Österreich 和“Umlaute”。 现在我想拆分它并在字符串上添加新的“单词”,如下所示Lübeck Nürnberg Ö
这个问题在这里已经有了答案: How to pass Unicode characters as JSP/Servlet request.getParameter? (5 个答案) 关闭 6 年前。
这个问题在这里已经有了答案: How to pass Unicode characters as JSP/Servlet request.getParameter? (5 个答案) 关闭 6 年前。
有人遇到过这个奇怪的问题吗? 我似乎无法在 FullCalendar.io 中覆盖此格式。 我只是想使用破折号(“-”)而不是 umlaut 'W'。 当前代码如下: header: { le
我是一名优秀的程序员,十分优秀!