Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 10.08.2018, 17:05   #21
_Bers
Профессионал
 
Регистрация: 16.12.2011
Адрес: Москва
Сообщений: 2,131
Репутация: 867
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Прямоугольники рисует.
покажите код.

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Но это ведь проблема только установленного шрифта, не так ли?
Думаю, у китайцев с этим нет никаких проблем
проблема шрифта, проблема кодировки консоли
_Bers вне форума   Ответить с цитированием
Старый 10.08.2018, 18:01   #22
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,562
Репутация: 1743
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
покажите, как в типичной черно-белой консольке вывести китайский иероглиф?
Код:

using System;

public class Test
{
    public static void Main()
    {
        Console.OutputEncoding = System.Text.Encoding.UTF8;

        string a = "\u263A";
        Console.WriteLine(a);
    }
}

waleri вне форума   Ответить с цитированием
Старый 10.08.2018, 18:14   #23
Мaкс
Форумчанин
 
Аватар для Мaкс
 
Регистрация: 12.06.2018
Адрес: Научная столица России.
Сообщений: 403
Репутация: -5
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Код:

using System;

public class Test
{
    public static void Main()
    {
        Console.OutputEncoding = System.Text.Encoding.UTF8;

        string a = "\u263A";
        Console.WriteLine(a);
    }
}

Это C#. А мы же в С/С++ разделе?
Мaкс вне форума   Ответить с цитированием
Старый 10.08.2018, 19:04   #24
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,014
Репутация: 675
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
покажите код.
Код:

#include <stdio.h>
int main() {printf("你好");}

nihao.PNG
Black Fregat вне форума   Ответить с цитированием
Старый 10.08.2018, 19:28   #25
_Bers
Профессионал
 
Регистрация: 16.12.2011
Адрес: Москва
Сообщений: 2,131
Репутация: 867
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Код:

using System;

public class Test
{
    public static void Main()
    {
        Console.OutputEncoding = System.Text.Encoding.UTF8;

        string a = "\u263A";
        Console.WriteLine(a);
    }
}

ваш способ не работает.
квадратики вместо красивых правильных иероглифов.
_Bers вне форума   Ответить с цитированием
Старый 10.08.2018, 20:02   #26
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,562
Репутация: 1743
По умолчанию

Мне прислать скриншот?
Настройте шрифт консоли...
waleri вне форума   Ответить с цитированием
Старый 11.08.2018, 14:48   #27
Pavia
Лис
Профессионал
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 1,526
Репутация: 1645
Радость

Что-бы отображались китайские символы надо смонтировать шрифт в консоль. Если с русскими шрифтами проблема на Win7 то надо использовать шрифт 'Lucida Console'.


Вод код он делает монтирование автоматически.
Код:


program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  Windows,
  ShellApi;

  // Для кириллицы  'Lucida Console'
  // Для китайского 'MS Gothic';
  // Для других символов свои шрифты.
const
//  FontName:AnsiString='Lucida Console';
//  FontFileName:AnsiString='%windir%\Fonts\lucon.ttf';

  FontName:AnsiString='MS Gothic';
  FontFileName:AnsiString='%windir%\Fonts\msgothic.ttc';

procedure FixCmd;
var
  Key: HKey;
const
  FontFamily:DWord=$36;
  FontSize:DWord=$100000;
  FontWeight:DWord=$190;

begin
  RegOpenKeyA(HKEY_CURRENT_USER, PAnsiChar('Console'), Key);
  RegSetValueExA(Key,PAnsiChar('FaceName') ,0, REG_SZ, PAnsiChar(FontName), lstrlenA(PAnsiChar(FontName))+1);
  RegSetValueExA(Key,PAnsiChar('FontFamily') ,0, REG_DWORD, @FontFamily, SizeOf(DWord));
  RegSetValueExA(Key,PAnsiChar('FontSize') ,0, REG_DWORD, @FontSize, SizeOf(DWord));
  RegSetValueExA(Key,PAnsiChar('FontWeight') ,0, REG_DWORD, @FontWeight, SizeOf(DWord));
  RegCloseKey(Key);
end;

procedure FixSelfCmd;
var
  Key: HKey;
const
  FontFamily:DWord=$36;
  FontSize:DWord=$100000;
  FontWeight:DWord=$190;
var Path:AnsiString;
begin
  Path:=ParamStr(0);
  // Перекодируем в формат реестра
  Path:=StringReplace(Path, '\', '_', [rfReplaceAll, rfIgnoreCase]);
  Path:='Console'+'\' + Path;
  RegCreateKeyExA(HKEY_CURRENT_USER, PAnsiChar(Path),0, nil, REG_CREATED_NEW_KEY,  KEY_ALL_ACCESS, nil, Key, nil);
  RegSetValueExA(Key,PAnsiChar('FaceName') ,0, REG_SZ, PAnsiChar(FontName), lstrlenA(PAnsiChar(FontName))+1);
  RegSetValueExA(Key,PAnsiChar('FontFamily') ,0, REG_DWORD, @FontFamily, SizeOf(DWord));
  RegSetValueExA(Key,PAnsiChar('FontSize') ,0, REG_DWORD, @FontSize, SizeOf(DWord));
  RegSetValueExA(Key,PAnsiChar('FontWeight') ,0, REG_DWORD, @FontWeight, SizeOf(DWord));
  RegCloseKey(Key);
  Halt(ShellExecute(0, 'open', PChar(ParamStr(0)), nil, PChar(GetCurrentDir), SW_RESTORE));
end;

function IsFontMountInCMD:Boolean;
var
  Key: HKey;
  Value:PAnsiChar;
  Len:Longint;
const
  FontFamily:DWord=$36;
  FontSize:DWord=$100000;
  FontWeight:DWord=$190;
begin
  RegOpenKeyA(HKEY_CURRENT_USER, PAnsiChar('Console'), Key);
  Len:=0;
  RegQueryValueExA(Key,PAnsiChar('FaceName'), nil, nil,  nil, @Len);
  GetMem(Value, Len);
  RegQueryValueExA(Key,PAnsiChar('FaceName'), nil, nil, PByte(Value), @Len);
  RegCloseKey(Key);
  Result:=FontName=value;
  Freemem(Value);
end;

function IsFontMountInSelfCMD:Boolean;
var
  Key: HKey;
  Value:PAnsiChar;
  Len:Longint;
const
  FontFamily:DWord=$36;
  FontSize:DWord=$100000;
  FontWeight:DWord=$190;
var Path:AnsiString;
begin
  Path:=ParamStr(0);
  // Перекодируем в формат реестра
  Path:=StringReplace(Path, '\', '_', [rfReplaceAll, rfIgnoreCase]);
  Path:='Console'+'\' + Path;
  RegOpenKeyA(HKEY_CURRENT_USER, PAnsiChar(Path), Key);
  Len:=0;
  RegQueryValueExA(Key,PAnsiChar('FaceName'), nil, nil,  nil, @Len);
  GetMem(Value, Len);
  FillChar(Value^,Len,0);
  RegQueryValueExA(Key,PAnsiChar('FaceName'), nil, nil, PByte(Value), @Len);
  RegCloseKey(Key);
  Result:=FontName=value;
  Freemem(Value);
end;

function HaveParam(const value:String):boolean;
var i:Integer;
begin
 Result:=False;
 for i:=0 to ParamCount do
   if ParamStr(i)=value then
      begin
        Result:=True;
        break;
      end;
end;

// Встроенный тест, запускаемый при старте программы
procedure StartOnTest;
var aFontFileName:AnsiString;
begin
// Проверяем установку шрифта
// [!] Переписать через  EnumFontFamilies
SetLength(aFontFileName,65536);
ExpandEnvironmentStringsA(PAnsiChar(FontFileName), PAnsiChar(aFontFileName), 65536);

if not FileExists(aFontFileName) then
   begin
   WriteLn(ErrOutput,'Fail: Cyrillic font "'+FontFileName+'" not found');
   Halt(0);
   end;
if not IsFontMountInCMD() then
   begin
   if not HaveParam('--FixCMD') then
       WriteLn(ErrOutput,'Info: Cyrillic font not mount in "CMD.EXE", use parameter --FixCMD to fix the error.')
     else FixCmd;
   end;
if not IsFontMountInSelfCMD() then
   begin
     FixSelfCmd;
   end;
end;


type TWordArray=array [0..65535] of Word;
PWordArray=^TWordArray;
// test
procedure test;
var r:DWord;
  hstdOut:DWord;
  wrCount:DWord;
  WideOutStr:WideString;
  P:PWordArray;
  OutStr:WideString;
begin
hstdOut:=GetStdHandle(STD_OUTPUT_HANDLE);
WideOutStr:='проба123456789';
P:=@WideOutStr[1];
P[5]:=$4f60;
P[6]:=$597d;
P[7]:=$01;
P[8]:=$02;
P[9]:=$262c;
P[10]:=$262d;
P[11]:=$262e;
P[12]:=$262f;
WideOutStr:='你好'+WideOutStr;
OutStr:=WideOutStr;
WriteConsoleW( hstdOut, PWideChar(@OutStr[1]), length(OutStr), wrCount, nil);
end;


procedure Main;
const
 CP_UTF16=1200;
begin
 StartOnTest;
 SetConsoleCP(CP_UTF16);
 SetConsoleOutPutCP(CP_UTF16);
 Test;
 readln;
end;

begin
 Main;
end.

__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума   Ответить с цитированием
Старый 12.08.2018, 05:42   #28
Vapaamies
Ваш К. О.
Профессионал
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Адрес: Санкт-Петербург
Сообщений: 1,684
Репутация: 973
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ничего, писать на английском.
Вопрос был нормальный. Издеваться зачем? Модераторские права не дают право издеваться над незнающими.
__________________
Разработчик языка программирования Кантор
Vapaamies вне форума   Ответить с цитированием
Старый 12.08.2018, 11:18   #29
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 16,973
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Причем тут модераторские права?оО

И я написал же почему лучше не париться с этим и писать на английском.
Alex11223 вне форума   Ответить с цитированием
Старый 14.08.2018, 12:59   #30
_Bers
Профессионал
 
Регистрация: 16.12.2011
Адрес: Москва
Сообщений: 2,131
Репутация: 867
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Мне прислать скриншот?
Настройте шрифт консоли...
так в деццком садике отвечают.

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

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

основная проблема - проблема локализации.
помимо собственно кодировки, существует ещё одна проблема: особенности национального правописания. так называемая "нормализация строки". например, какая нибудь арабская вязь пишется справа-налево, корейский сверху-вниз,
во многих языках, например в немецком сочетание нескольких подряд идущих символов на самом деле обозначают один единственный символ, и все это должно отображаться/вставляться/редактироваться как нибудь этак по особенному. если до кучи, все это добро ещё нужно и парсить, например, выполнять поиск/вставку/etc, тогда вообще туши свет.

вот и получается по итогу, что за локализацию отвечают пухлые фреймворки.
юникод в сферическом ваккуме ничего не стоит.

/зы упростим задачу. в редакторе вижуал студии, в рамках одного документа можно печатать хоть иероглифами, хоть русскими. то бишь - совмещать разные языки. покажите, как вы сможете одновременно печатать в консольку иероглифами, и русскими
_Bers вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Соответсвии русского в консоли и Far Manager fenek644 Ruby 1 05.11.2017 01:21
Парадоксы Русского языка Smitt&Wesson Свободное общение 0 31.05.2016 23:44
Отображение русского языка InFlux БД в Delphi 36 11.01.2016 17:29
какой компилятор лучше всего использовать для изучения языка С++ Zweck Помощь студентам 11 01.02.2014 12:36
Разработать две подпрограммы: букву в заглавную и букву в строчную (в т.ч. для русского языка) makzagdon Assembler 1 25.04.2011 08:53


01:53.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru