SuperMiQi Ответов: 1

Почему в windows 7 chinese x64, почему приложение VB6 не запрашивает ® ?


Всем Привет,

Я хотел бы собрать несколько полезных советов, чтобы осветить следующий вопрос:

Я пытаюсь попасть в текстовое поле, зарегистрированный символ отображается, но когда я запускаю приложение на китайском языке windows 7, он заменяется на ?.

Я обнаружил, что номер Юникода - это U+AE. Как я мог расшифровать его, чтобы вызвать соответствующий символ ?

Я также использовал тот же шрифт из блокнота на китайской ОС windows 7 (simsun), но все равно никакой разницы.

Я знаю, что это vb6, который я использую, и вы говорите мне использовать vb.net но если бы у меня был выбор, я бы не стал задавать вам этот вопрос.

Я очень надеюсь, что кто-то уже был перед этим вопросом.

Большое спасибо очень много заранее.
С уважением.
Мики

Что я уже пробовал:

Я попробовал следующее:
Переход на другие шрифты:

Шрифт.Name = " Arial Unicode MS"
Font. Size = 12

MsgBox "Chinese" &StrConv ( " ® " , vbFromUnicode)
MsgBox ChrW(& HAE)

Форма form1.ФРМ

Я тоже пробовал шрифт "Тахома", но все тот же эффект.

Я также нашел fm20.dll который может охватывать некоторые элементы управления, но был бы более заинтересован в уникальном способе также использоваться с msgBox.

1 Ответов

Рейтинг:
1

Jochen Arndt

Хотя VB6 хранит строки внутри Юникода, он не поддерживает Юникод для таких элементов управления, как текстовые поля. Все строки будут преобразованы в ANSI/многобайтовые кодировки, используя текущую кодовую страницу. Если он не содержит совпадения с символом Юникода, то ? используется символ (что, вероятно, происходит здесь для китайской кодовой страницы).

Видеть Отображение строк Unicode в Visual Basic 6.0[^] для подробного описания.

Решение: используйте более свежую версию VB.


SuperMiQi

Здравствуйте Сэр,
Спасибо за информацию, но я попробовал пример программы, и это дает также забавный эффект. Второй китайский иероглиф отображается неправильно.

Я даже не связан с китайским иероглифом, а с этим единственным символом®.
Я предполагаю, что это связано с шрифтом, но с каким именно.

Это проект vb6, используемый клиентом, и позже в этом году он будет преобразован в vb.net но на данный момент намек был бы очень ценен.

Заранее большое вам спасибо.
С уважением,
Мики

Jochen Arndt

Зарегистрированный символ имеет кодовую точку Unicode U+00AE и то же самое (HAE) с западными кодовыми страницами. Поэтому он должен отображаться при фактическом использовании Западной кодовой страницы при запуске приложения. Также не должно быть необходимости использовать StrConv функция. Вы пробовали это?

Шрифт не должен иметь значения, потому что большинство - если не все - должны содержать символ.

Только если фактически используемая кодовая страница не содержит символа, ее следует заменить вопросительным знаком.

SuperMiQi

Что такое западная кодовая страница ?
Во всех примерах он ссылается на кодовую страницу 134 (упрощенный китайский, gb2312-материковый Китай (КНР) и Сингапур). Я, конечно, упускаю что-то основное, но в настоящее время я не понимаю, в чем может быть проблема.
У вас есть способ предоставить мне пример кода ?
Заранее большое вам спасибо.
С уважением,
Мики

Jochen Arndt

Кодовая страница устанавливается в соответствии с локальными настройками Windows (язык).
См. также https://en.wikipedia.org/wiki/Windows_code_page.
Хотя они больше не используются с последними версиями Windows, они все еще поддерживаются для поддержки старых приложений, которые не знают Unicode, как приложения VB6.

Западные кодовые страницы-это те, которые используют латинские символы. Если вы выберете Западный язык, например английский, ваш код должен работать. Но если вы используете другие языки, такие как китайский или японский, ваш код, вероятно, не будет работать. Но при выборе Западной кодовой страницы китайские или японские символы больше не поддерживаются.

SuperMiQi

Привет Йохен
Спасибо за ваш ответ, но я все еще задаюсь вопросом, почему поверх китайских иероглифов не так просто получить этот символ ® доступным/отображаемым ?

Jochen Arndt

Потому что кодовые страницы содержат фиксированный набор символов. Символы, которые не поддерживаются кодовой страницей, не могут быть отображены. Я не могу ответить, почему это происходит для зарегистрированного символа здесь, потому что это требует знать, какая кодовая страница и какая версия Windows используется и как приложение было построено / VB6 хранит строки (я не знаю, как VB6 хранит строки внутри при построении).

Но это проблемы прошлого. И нет никакого решения для всех случаев, кроме использования приложений Unicode.