Любой язык делает Unicode и кроссплатформенный правильно и полностью? - PullRequest
5 голосов
/ 17 февраля 2011

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

Ни Perl, ни Python не могут выводить Unicode на консоль непосредственно под * nix и Windows (хотя существуют различные обходные пути). Основная причина в том, что * nix ОС любят свой Unicode в UTF-8, а Windows любит свой Unicode в UTF-16. Но также кажется, что Windows сильно затрудняет использование широких символов в консоли, хотя и консоль, и wprintf являются родными широкими символами .

Так что вопрос в том, станет ли ситуация лучше, если я посмотрю за пределы этих языков на Java, C #, Scala и т. Д. Или есть ли какие-либо языки сценариев, которые начинались в Windows, а затем были портированы на * nix?

Вот идеальный псевдокод:

function main()
{
    print( L"hello, 世界" );
}

Ответы [ 3 ]

2 голосов
/ 03 декабря 2012

Имеет ли какой-либо язык юникод и кроссплатформенность правильно и полностью?

C # поддерживает Unicode очень широко. Его стандартная библиотека (.NET Framework) также имеет выдающуюся поддержку Unicode. Кроссплатформенность разумна, но не идеальна: она достигается через Mono, а на мобильных платформах - через Xamarin.

Программы командной строки довольно переносимы, но могут быть испорчены древними реликвиями, такими как терминалы SSH, которые не обновлялись в течение десяти или более лет.

Вот идеальный псевдокод:

C # подходит довольно близко:

using System;
class Program
{
    static void Main(string[] args)
    {
        Console.OutputEncoding = System.Text.Encoding.UTF8;
        Console.WriteLine("tést, тест, τεστ, ←↑→↓∏∑√∞①②③④, Bài viết chọn lọc");
    }
}

Снимок экрана с выводом (используйте Consolas или другой шрифт, содержащий все вышеперечисленные символы):

proof

Конечно, C # не является языком сценариев; он довольно сильно отличается во всем.

0 голосов
/ 17 февраля 2011

Возможно, это один из обходных путей, на которые вы намекали, но: вы можете chcp 65001 в «окне DOS» с не растровым шрифтом выбрать и просмотреть UTF-8вывод из скриптов (или программ), которые работают без изменений в Unix или Windows.Платой является то, что файлы .bat / .cmd не будут выполняться.

0 голосов
/ 17 февраля 2011

AFAIK. Почти все языки сценариев начинались в мире Unix, а затем были перенесены в Windows.Я не знаю ни одного примера языка (сценариев), который начинался в Windows ... Одним из языков сценариев, который в наши дни выглядит весьма неплохо с Unicode, является Ruby.

...