Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2018, 16:05   #21
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

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

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

Цитата:
Сообщение от _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, 17:14   #23
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от 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, 18:04   #24
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
покажите код.
Код:
#include <stdio.h>
int main() {printf("你好");}
nihao.PNG
Black Fregat вне форума Ответить с цитированием
Старый 10.08.2018, 18:28   #25
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от 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, 19:02   #26
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

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

Что-бы отображались китайские символы надо смонтировать шрифт в консоль. Если с русскими шрифтами проблема на 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, 04:42   #28
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

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

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

И я написал же почему лучше не париться с этим и писать на английском.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.08.2018, 11:59   #30
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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