Articles of UTF 8

有没有办法检测Windows和Linux在C + +的文件名编码?

我试图做一个跨平台的应用程序在c + +字符转换。 我用UTF-8规则build立了一个转换表。 等式(A =诶)。 我使用boost库来获取文件名。 我的理解是,我必须将它们从编码X转换为UTF-8,执行转换,转换回编码X并保存新的文件名。 我如何找出文件系统正在使用的编码?

由于\ n,windows和linux的base 64编码不匹配

我在windows中使用下面的命令find了基本的64位编码string: Console.WriteLine(System.Convert.ToBase64String(Encoding.UTF8.GetBytes("4"))); 这出来是: NA== 之后,我使用以下命令在linux中find了base64编码的string: openssl enc -base64 <<< '4' 这出来是: NAo= 从其他post看了很多后,我确保在Windows中使用utf-8编码。 但是,现在的问题是我认为\r\n或\n 。 那么我们如何纠正呢?

在Linux中从EBCDIC转换为UTF8

我使用Perl从数据库AS / 400 DB2中导入了一个表。 问题是这个string是用EBCDIC Latin-1(意大利语)编码的。 如何将结果文件转换为Linux bash中的纯正utf-8?

Haskell:quoteFile在unicode字符上的“无效字节序列”的文本文件上失败

我在我的虚拟环境(Debian Wheezy与GHC 7.8.4安装)中quoteFile面临问题。 我从Text.Shakespeare.Text描述了准标准文件的文件版本: import Language.Haskell.TH.Quote (QuasiQuoter, quoteFile) import Text.Shakespeare.Text (st) sfFile :: QuasiQuoter stFile = quoteFile st 这在我的主机上运行得非常好,但是,在我的虚拟环境(Docker镜像)上出现以下错误: 尝试运行编译时代码时发生exception:test-file.md:hGetContents:无效的参数(无效的字节序列) 代码:Language.Haskell.TH.Quote.quoteExp stFile“test-file.md” 我的小REPL调查显示,文本文件中的第一个Unicode字符发生错误,在我目前的情况下,这是'«'左指针双angular引号: import System.IO (IOMode(..), hGetContents, openFile, openBinaryFile, utf8) main = do h <- openBinaryFile "test-file.md" ReadMode hGetContentContents h — Binary read works fine out-of-box. h' <- openFile "test-file.md" ReadMode hSetEncoding h' utf8 hGetContentContents […]

Linux中存储的文本文件的字符编码在哪里?

我知道简短的答案应该是“无处”,但是在下面的testing2中有一些不完整的东西。 testing1.在Gedit中,我创build一个只包含string“aàbï”的新文件,我select“另存为”,还有一个用于select字符编码的select器。 所以我将它保存为“Unicode(UTF-8)”,然后重复相同的操作,并将其另存为“ISO-8859-15”。 第一个文件大小为7个字节(2个1字节字符,2个2字节字符,在文件末尾有一个LF,如hex转储所示)。 第二个文件的大小是5个字节(拉丁编码中的4个1字节字符加LF)。 这表明编码不存储在文件的任何地方。 显然,当我在Gedit中打开文件并正确解码时,必须通过分析内容来弄清楚如何解码。 Test2 。 我也是这样做的,但是这次文件的内容只是“abcd”,就是四个ASCII字符。 两个保存的文件具有相同的大小(5个字节)和相同的hex转储 。 看起来这两个文件是完全相同的,难以区分,所以,似乎没有关于编码的信息包含在文件中。 但是,当我在Gedit中再次打开testing2的两个文件,并且我去了另存为,select了保存文件的编码。 Gedit以某种方式可以知道一个文件是用UTF-8编码的,另一个是用ISO-8859-15编码的,尽pipe它们只包含ascii字符,这些字符导致了相同的字节序列,并且看起来是相同的。 那个怎么样? 文件系统中是否有某种元数据? 还是只是Gedit有自己的caching,并记住用户在同一台​​计算机上已经打开(保存)的文件的用户select? PS注意到这个问题与编程有关,即使我提出了一个非编程testing用例,因为这是关于给定types的文件是如何编码的,这影响了如何从一个文件读取,parsing,解码,编码和写入程序。

支持grep unicode 16

我在macosx上使用textedit创build了两个文件,然后使用不同编码的相同内容 grep xxx filename_UTF-16 没有 grep xxx filename_UTF-8 xxxxxxx xxxxxxyyyyyy grep不支持UTF-16?

我怎样才能将LANG设置为ascii?

我正在使用PuTTY访问Ubuntu机器,并使用gcc。 本机默认的LANG环境variables设置为en_NZ.UTF-8 ,这使得GCC认为PuTTY能够显示UTF-8文本,这似乎不是。 也许这是我的字体,我不知道 – 这是这样的: foo.c:1: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â at end of input 如果我将其设置为export LANG=en_NZ ,那么这将导致GCC正确行为,我得到: foo.c:1: error: expected '=', ',', ';', 'asm' or '__attribute__' at end of input 但是这会导致其他一切都出错。 例如 man foo man: can't set the locale; make sure $LC_* and $LANG are correct 我已经浏览了Google,而且我不能为了我的生活找出必须使用ASCII的东西。 en_NZ.ASCII不起作用,我也找不到任何其他的东西。 谢谢

Java中的八进制转义导致错误的字节值,编码问题?

根据这个文档( http://java.sun.com/docs/books/jls/third_edition/html/lexical.html,3.10.6 ),一个OctalEscape将被转换成一个Unicode字符。 现在我有这个问题,下面的代码将导致一个2字节的Unicode字符与错误的信息。 for (byte b : "\222".getBytes()) { System.out.format("%02x ", b); } 结果是“c2 92”。 我只是解释“92”,因为这将是从222八进制转换为hex(92)的值。 如果我用一个字符来testing,字节信息是正确的。 System.out.format("%02x ", (byte)'\222'); 在Java / c 1.6.0_18的Linux上,一个字节的结果是“92”,我的默认编码是“UTF-8”。 我的问题的背景是,我正在寻找一种方法来转换八进制转义string从input编码Cp1252到UTF-8。 由于将八进制转义string转换为2个字节,因此失败。 有人知道为什么总是有一个额外的字节“C2”被添加到字符数组? 简单的计数表明,数组中只有一个字符。 System.out.println("\222".toCharArray().length); // will result in "1" 谢谢你的提示。 更新:由于BalusC提到的八进制转义值被解释为UTF-8值,这就产生了问题。 只要这个值保存在源代码(UTF-8)中,我就不可能使用其他编码读取这个string。 我是对的? 如果我读取一个Cp1252编码的文件,我必须用正确的字符集声明InputReader的字符集,并对UTF-8进行编码,以UTF-8处理和保存读取的内容。

我怎样才能以编程方式更改文件编码的Linux?

有没有程序更改文件编码为UTF-8编程。 我有1000个文件,我想在Linux中保存为UTF-8格式。 谢谢。

Linux shell和文件系统如何识别Unicode?

我知道Linux文件系统将文件名存储为字节序列,这意味着Unicode编码无关。 但是,UTF-8或增强型UTF-8以外的编码可能很好地使用0字节作为Unicode字符的多字节表示的一部分,该字符可以出现在文件名中。 在Linux文件系统C代码中的任何地方,您都可以用0字节来终止string 那么Linux文件系统如何支持Unicode呢? 它是否假设所有创build文件名的应用程序只使用UTF-8? 但事实并非如此,是吗? 同样,shell(如bash)在模式中使用*来匹配任意数量的文件名字符。 我可以在shell C代码中看到,它只是使用ASCII字节*来逐字节地分隔匹配。 对于UTF-8编码的名字来说很好,因为它具有这样的性质,即如果你取得一个string的字节表示,那么匹配从*开始的一些字节,并且用其他string匹配其余的字节,然后事实上开始的字节匹配一串完整的字符,而不仅仅是字节。 但其他编码没有这个属性,是吗? 那么,shell是否假定UTF-8?