2012-10-02 5 views
9

Po pierwsze - moje przeprosiny, jeśli odpowiedziano na to sto razy! D'oh!Czy pliki zasobów są kompilowane jako strona kodowa UNICODE lub ANSI?

Ale moje poszukiwania-fu najwyraźniej do bani, jak mam szczęścia odpowiedzi na to podstawowe pytanie:

Jak zasobów przechowywanych w EXE/DLL? Jako UNICODE (UCS-2, rodzimy wewnętrzny format znaków w systemie Windows) lub jako wielobajtowe znaki korzystające ze strony kodowej bloku zasobów?

  • Jak ciągi jeden embed UNICODE do swoich zasobów (.RC)?
  • Czy można wstawić tekst UNICODE (UCS-2) do łańcuchów językowych z poziomu VS 2012?
  • Czy system Windows nadal korzysta z UCS-2, czy też używa wewnętrznego UTF16?

Po prostu szukam ogólnych odpowiedzi lub linków do szczegółów, zamiast szczegółowych instrukcji dotyczących umieszczania ciągu UNICODE w tabeli ciągów .rc. Dzięki!

+2

Nie jest to bezpośrednio związane z pytaniem, ale od czasu Windows 2000 wewnętrznym formatem znaków systemu Windows jest UTF-16. Różnice między UTF-16 i UCS-2 są niewielkie, ale istnieją. – kusma

Odpowiedz

7

Wszystkie ciągi zasobów w Win32 są kompilowane jako Unicode. Aby uzyskać więcej informacji, patrz here. Sam skrypt .rc może być ANSI (przy użyciu lokalnej strony kodowej) lub UCS-2 z odpowiednią specyfikacją materiałową (reference).

+0

Skrypt RC może być również UCS-2. – Deanna

+0

Dzięki za edycję, Deanna. Właśnie miałem wkleić to. – WhozCraig

+0

Tak więc, nie ma znaczenia, czy projekt EXE/DLL jest ustawiony na MBCS czy UNICODE - binarne zasoby w EXE/DLL są w UNICODE dla rzeczy takich jak dialogi, ciąg tabele i tak dalej? – Mordachai

3

Jeśli masz wątpliwości, spójrz na heks. Oto początek pliku rc NOTEPAD.EXE jest w UTF16:

0002ed60 01 00 53 00 74 00 72 00 69 00 6e 00 67 00 46 00 |..S.t.r.i.n.g.F.| 
0002ed70 69 00 6c 00 65 00 49 00 6e 00 66 00 6f 00 00 00 |i.l.e.I.n.f.o...| 
0002ed80 a6 02 00 00 01 00 30 00 34 00 30 00 39 00 30 00 |......0.4.0.9.0.| 
0002ed90 34 00 42 00 30 00 00 00 4c 00 16 00 01 00 43 00 |4.B.0...L.....C.| 
0002eda0 6f 00 6d 00 70 00 61 00 6e 00 79 00 4e 00 61 00 |o.m.p.a.n.y.N.a.| 
0002edb0 6d 00 65 00 00 00 00 00 4d 00 69 00 63 00 72 00 |m.e.....M.i.c.r.| 
0002edc0 6f 00 73 00 6f 00 66 00 74 00 20 00 43 00 6f 00 |o.s.o.f.t. .C.o.| 
0002edd0 72 00 70 00 6f 00 72 00 61 00 74 00 69 00 6f 00 |r.p.o.r.a.t.i.o.| 
+0

To nie odpowiada na pytanie. Pytanie brzmi, czy znaki Unicode mogą być umieszczone w pliku .rc. Nie możesz odpowiedzieć na to, patrząc na ** wynik ** kompilatora zasobów. Poza tym nic w hexdump nie identyfikuje UTF-16. To może być również UCS-2. – IInspectable

Powiązane problemy