Notepad++ 的编码叫“ANSI”,有谁知道 Ruby 的编码叫什么吗?

问题描述 投票:0回答:4

我有一堆 .txt,Notepad++ 说(在其下拉“编码”菜单中)是“ANSI”。

其中有德语字符,[äöüß],在 Notepad++ 中显示良好。

但是当我

File.read 'this is a German text example.txt'
他们时,他们并没有出现在irb中。

那么有谁知道我应该给出什么论据

Encoding.default_external=

(我想这就是解决方案,对吧?)

'utf-8'
'cp850'
时,它会将其中包含“äöüß”的“ANSI”文件读取为“\xE4\xF6\xFC\xDF”...

(请毫不犹豫地在你的答案中提及明显“显而易见”的事情;我几乎是新手,但仍然知道足以提出这个问题。)

ruby character-encoding notepad++ diacritics codepages
4个回答
15
投票

他们的意思可能是 ISO/IEC 8859-1(又名 Latin-1)、ISO-8859-1、ISO/IEC 8859-15(又名 Latin-9)或 Windows-1252(又名 CP 1252)。所有 4 个在位置

ä
处都有
0xE4


10
投票

我在Notepad++论坛上找到了这个问题的答案,2010年由CChris回答,看起来很权威。

问题:编码ANSI?

答案:

这将是您计算机的系统代码页(代码页 0)。

更多信息:

显示您当前的代码页。

>help chcp
Displays or sets the active code page number.

CHCP [nnn]

  nnn   Specifies a code page number.

Type CHCP without a parameter to display the active code page number.

>chcp
Active code page: 437

代码页标识符

Identifier  .NET Name  Additional information
437         IBM437     OEM United States

4
投票

我认为它是“cp1252”,别名“windows-1252”。

阅读 Jörg 的答案后,我返回 ruby-doc.org 上的 Encoding 页面,试图找到他提到的特定编码的引用,就在那时我发现了

Encodings.aliases
方法。

所以我在这个答案的末尾整理了方法。

然后我查看了 notepad++ 中的输出,将其视为“ANSI”和 utf-8,并将其与 irb 中的输出进行比较...

我只能在 irb 输出中找到两个地方,其中 utf-8 文件出现乱码,其方式与在记事本++中以“ANSI”查看时出现的方式完全相同,而这些地方适用于 cp1252 和 cp1254。

cp1252 显然是我的“文件系统”编码,所以我就这么做。

我编写了一个脚本来复制所有转换为 utf-8 的文件,并尝试从 1252 和 1254 开始。

到目前为止,utf-8 正则表达式似乎适用于两组文件。

现在我必须尝试记住在遇到所有这些编码难题之前我实际上想要完成什么。 xD

def compare_encodings file1, file2
    file1_probs = []
    file2_probs = []

    txt = File.open('encoding_test_output.txt','w')

    Encoding.aliases.sort.each do |k,v|
        Encoding.default_external=k
        ename = [k.downcase, v.downcase].join "  ---  "
        s = ""
        begin
            s << "#{File.read(file1)}" 
        rescue
            s << "nope nope nope"
            file1_probs << ename
        end
        s << "\t| #{ename} |\t"
        begin
            s << "#{File.read(file2)}"
        rescue
            s << "nope nope nope"
            file2_probs << ename
        end
        Encoding.default_external= 'utf-8'
        txt.puts s.center(58)
        puts s.center(58)
    end
    puts
    puts "file1, \"#{file1}\" exceptions from trying to convert to:\n\n"
    puts file1_probs
    puts
    puts "file2, \"#{file2}\" exceptions from trying to convert to:\n\n"
    puts file2_probs
    txt.close
end

compare_encodings "utf-8.txt", "np++'ANSI'.txt"

0
投票

显然我发现所有这些编码(由 Visual Studio Code 完成)编码(Windows-1252、ISO8859-1、ISO8859-3 和 ISO8859-15)与 Notepad++ 的 ANSI 编码不同。似乎度数符号 (°) 的编码不同。

© www.soinside.com 2019 - 2024. All rights reserved.