2013-04-18 24 views
15

Tôi có một loạt các .txt của Notepad ++ nói (trong trình đơn thả xuống "Mã hóa") là "ANSI".Mã hóa mà Notepad ++ chỉ gọi là "ANSI", có ai biết gọi nó là gì cho Ruby không?

Chúng có các ký tự tiếng Đức trong chúng, [äöüß], hiển thị tốt trong Notepad ++.

Nhưng chúng không hiển thị ngay trong irb khi tôi File.read 'this is a German text example.txt' chúng.

Vì vậy, không ai biết đối số nào tôi nên cung cấp cho Encoding.default_external=?

(Tôi giả định rằng muốn là giải pháp, phải không?)

Khi 'utf-8' hoặc 'cp850', nó đọc "ANSI" tập tin với "äöüß" trong đó như "\ xE4 \ xF6 \ xFC \ xDF "...

(Xin đừng ngần ngại đề cập đến những điều rõ ràng" rõ ràng "trong câu trả lời của bạn; Tôi khá là mới mẻ như bạn có thể và vẫn biết đủ để đặt câu hỏi này.)

+0

Nó phụ thuộc vào miền địa phương hệ điều hành của bạn. Đối với tiếng Đức hoặc tiếng Anh, đó là Windows-1252. Mặc dù Notepad ++ có thể không tuân theo điều này và chỉ sử dụng nó làm bí danh cho Windows-1252. Nó không phải là bất kỳ mã hóa ISO cho chắc chắn. Xem http://en.wikipedia.org/wiki/Windows_ANSI_code_page#ANSI_code_page – Esailija

+0

Cảm ơn, tôi nghĩ rằng đó là cp1252, vâng. –

Trả lời

10

Ý nghĩa của chúng có lẽ là ISO/IEC 8859-1 (aka Latin-1), ISO-8859-1, ISO/IEC 8859-15 (còn gọi là Latin-9) hoặc Windows-1252 (còn gọi là CP 1252). Tất cả 4 trong số họ có ä tại vị trí 0xE4.

+1

Cảm ơn, tôi nghĩ rằng đó là cp1252, yeah. –

3

Tôi nghĩ đó là 'cp1252', bí danh 'windows-1252'.

Sau khi đọc câu trả lời của Jörg, tôi đã quay lại trang Encoding trên ruby-doc.org để tìm các tham chiếu đến mã hóa cụ thể mà anh đã đề cập và đó là khi tôi phát hiện phương thức Encodings.aliases.

Vì vậy, tôi đã loại bỏ phương pháp ở cuối câu trả lời này.

Sau đó, tôi nhìn vào sản lượng trong notepad ++, xem nó như là cả hai 'ANSI' và utf-8, và so sánh đó đến đầu ra trong IRB ...

tôi chỉ có thể tìm thấy hai nơi trong đầu ra IRB nơi tập tin utf-8 đã bị cắt xén theo cùng một cách chính xác nó xuất hiện trong notepad ++ khi xem nó như là 'ANSI', và những nơi đã được cho cp1252 và cp1254.

cp1252 rõ ràng là mã hóa 'hệ thống tệp' của tôi, vì vậy tôi sẽ thực hiện việc đó.

Tôi đã viết một kịch bản để làm bản sao của tất cả các tập tin chuyển đổi sang của utf-8, cố gắng cả từ 1252 và 1254.

utf-8 regexes dường như làm việc với cả hai bộ file cho đến nay.

Bây giờ tôi phải cố gắng nhớ những gì tôi đã thực sự cố gắng để thực hiện trước khi tôi chạy vào tất cả các nhức đầu mã hóa. 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" 
5

Tôi tìm thấy câu trả lời cho câu hỏi này trên diễn đàn Notepad ++, được trả lời vào năm 2010 bởi CChris, người có vẻ có thẩm quyền.

Question: Encoding ANSI?

Trả lời:

Đó sẽ là trang mã hệ thống cho máy tính của bạn (mã trang 0).

More Info:

Hiển thị trang mã hiện tại của bạn.

>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 

Code Page Identifiers

Identifier .NET Name Additional information 
437   IBM437  OEM United States 
Các vấn đề liên quan