- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我来自德国,所以我使用变音符号,例如 ä
、ö
和 ü
。然而,Golang 无法从标准输入中正确读取它们。
当我执行这个简单的程序时:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
for {
b, _, _ := bufio.NewReader(os.Stdin).ReadLine()
printBytes(b)
}
}
func printBytes(bytes []byte) {
for _, b := range bytes {
fmt.Printf("0x%X ", b)
}
fmt.Println()
}
我得到输出:
C:\dev\golang>go run test.go
ä
0xE2 0x80 0x9E
E2 80 9E
不是 UTF-8 中 ä
的正确字节序列(this tool 告诉我这是一个“DOUBLE LOW-9 QUOTATION MARK” -> „
),当我打印出我读过的内容时,它打印出 "
。我写了一个小的“hack”,它似乎可以正确读取字符:
package main
/*
#include <stdio.h>
#include <stdlib.h>
char * getline(void) {
char * line = malloc(100), * linep = line;
size_t lenmax = 100, len = lenmax;
int c;
if(line == NULL)
return NULL;
for(;;) {
c = fgetc(stdin);
if(c == EOF)
break;
if(--len == 0) {
len = lenmax;
char * linen = realloc(linep, lenmax *= 2);
if(linen == NULL) {
free(linep);
return NULL;
}
line = linen + (line - linep);
linep = linen;
}
if((*line++ = c) == '\n')
break;
}
*line = '\0';
return linep;
}
void freeline(char* ptr) {
free(ptr);
}
*/
import "C"
import (
"fmt"
"golang.org/x/text/encoding/charmap"
)
func getLineFromCp850() string {
line := C.getline()
goline := C.GoString(line)
C.freeline(line)
b := []byte(goline)
ub, _ := charmap.CodePage850.NewDecoder().Bytes(b)
return string(ub)
}
func main() {
for {
line := getLineFromCp850()
printBytes([]byte(line))
}
}
func printBytes(bytes []byte) {
for _, b := range bytes {
fmt.Printf("0x%X ", b)
}
fmt.Println()
}
然后打印出来:
C:\dev\golang>go run test.go
ä
0xC3 0xA4 0xA
C3 A4
是 ä
的正确字节序列(0A 是换行符,我的 hack 没有去掉)所以看起来,从 CP850 读取并转换为正如我所料,UTF-8 完成了这项工作,但为什么当我使用 Go 的功能而不是 cgo 阅读该行时,Go 会给我乱码? Go 有什么问题,它给了我这些值,它不会将输入字节解释为 CP850 而是另一个字符集吗?有没有更好的 Go-only 方法来处理这个问题?
此问题仅在从标准输入读取 时出现。当我将 UTF-8 ä
打印到标准输出时,它会在控制台中正确打印。
最佳答案
所以对于某些系统来说,这是 Golang 中的一个错误,特别是对于 Windows 系统,在这些系统中,总体使用的字符集和控制台字符集是不同的(其中 GetACP()
和 GetConsoleCP()
来自 WinAPI 返回不同的东西)。例如,在德国(可能还有其他西欧国家),Windows 使用代码页 1252 作为整体字符集,但它使用代码页 850 作为控制台 cmd.exe
。不知道为什么,但事实就是如此。 Golang 错误地使用 GetACP()
将输入解码为 UTF-8,而实际上它本应使用 GetConsoleCP()
返回的代码页。我们在 Issue 中发现了问题我创建了,我们希望看到为下一版本的 Golang 合并的修复程序。
我们还在 Windows 上发现了一个问题,其中 Golang 将字符解码为分解的 UTF-8 字符(即它会将 ä
读取为字符 a
后跟 COMBINING DIAERESIS ̈
),这可能会导致其他问题,例如,打印那些分解的字符会将它们分开打印,而不是打印一个组合字符。
关于Golang stdin 读错了德语变音符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39111624/
例如,当输入“Beispielwort”时,vim 的拼写检查器会建议“Beispiel Wort”。不过,它接受 Beispiel-Wort。 这有两个问题: 在德语中,使用连字符连接单词是一种糟糕
我有这个验证规则 'event_start' => 'required|date|after:today', 我找不到在哪里翻译“今天”这个词。 当我达到验证规则时,我收到此消息: Eventstar
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
我的查询中有日期输出和格式字符串: $date = $sql->getValue("date"); $datenew = DateTime::createFromFormat('Y-m-d', $da
这个问题已经有答案了: Remove diacritical marks (ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ) from Unicode chars (12 个回答) Jav
我现在已经实现了 Jquery-UI,它运行良好,但我希望全部使用德语,例如日期选择器。 我已经尝试更改 jquery-ui.js 中的字符串: this._dayOverClass = "ui-da
我正在尝试在 laravel 5.2 中使用德语的 Carbon 的 diffForHumans() 显示 created_at 属性。 created_at 在数据库中存储为:2017-03-29
我想将文本框值翻译成特定语言,如西类牙语、中文、德语等,它们都在下面的下拉列表中,我想在标签中显示文本框翻译值,但不在标签中显示翻译值。 English J
我找不到类似的问题所以这里是:在进行格式化时,Moment.js 似乎无法理解除英语以外的其他语言的月份。 带有区域设置的 Moment.js 位于 Assets 中,当我尝试执行以下操作时: mom
我正在寻找一种(最好是仅限 XAML)解决方案,以按以 dd.MM.yyyy 格式显示日期值的列对 WPF DataGrid 进行自动排序。 DataGrid 的 ItemSource 是一个 Dat
如何将字符串 (wstring) 从小写字符转换为大写字符,反之亦然?我在网上搜索了一下,发现有一个 STL 函数 std::transform。 但直到现在我还没有想出如何为函数提供正确的语言环境对
我需要将字符串中的重音替换为对应的英语 例如 ä = ae ö = oe Ö = Oe ü = ue 我知道从字符串中删除它们,但我不知道要替换。 如果您有任何建议,请告诉我。我正在用 C# 编写代码
用数字对字符串进行排序在一种语言和另一种语言之间的实现方式不同。例如,在英语中,数字在升序排序中位于字母之前。但是,在德语中,数字在字母之后是升序排列的。 我尝试使用 Collator 对字符串进行排
我是 OSM 新手,在网页中启用了世界地图。我看到可以在 osm 页面上切换 map 语言。但找不到如何在嵌入 map 中设置所需语言的教程?有什么想法吗? 最佳答案 尝试相应地更改域名。例如,ope
我无法找到或创建仅匹配字母、空格、重音字母以及西类牙语和德语字母的正则表达式。 我现在正在使用这个: var reg = new RegExp("^[a-z _]*$"); 我试过: ^[:alpha
我在 JavaScript strToLower() 方面遇到了麻烦 var s = 'tür'; alert(s); alert(s.strToLower()); 应该产生相同的输出。但是输出不同:
我遇到的问题是我需要对一大堆 char 指针进行排序,但它们有特殊字符。我设法得到了这样的排序过程: std::sort(dict_.begin(), dict_.end(), comp); bool
场景: 我正在开发一个iOS应用,应该将其上传到世界各地的所有应用商店中。 该应用程序应支持2种语言,德语和英语。德国使用德语,世界其他地区使用英语。 我做了什么: 当我开始开发该应用程序时,我在In
我应该如何在一个供全局使用的网站上存储(和展示)多种语言的文本?内容主要是 500 多字文章的形式,尽管我还需要翻译每一页上的小段文字(例如“打印这篇文章”或“返回菜单”)。 我知道有几个 CMS 包
我有两个关于在 Lucene 中处理德语变音符号的问题: 我正在尝试找到一种方法,将写为“ue”、“ae”等的德语变音符号转换为折叠形式“u”、“a”等。这是由 GermanAnalyzer(以及它使
我是一名优秀的程序员,十分优秀!