Well running batch files after works fine for me, but the output is incorrect.
I'm Windows 7, 64bit FPC 2.7.1.
But using WriteConsole, instead of Writeln works fine.
program consoleTest;
{$mode objfpc}{$H+}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
{$IFDEF UseCThreads}
cthreads,
{$ENDIF}
{Widestring manager needed for widestring support}
cwstring,
{$ENDIF}
{$IFDEF WINDOWS}
Windows, {for setconsoleoutputcp}
ctypes,
{$ENDIF}
Classes
;
var
{$IFDEF WINDOWS}
CurrentOutputCP: cuint;
{$ENDIF}
UTF8TestString: string;
bw:Dword;
begin
{$IFDEF WINDOWS}
// see
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms686036%28v=vs.85%29.aspx
CurrentOutputCP:=GetConsoleOutputCP;
SetConsoleOutputCP(CP_UTF8);
//Note: no use of input console: SetConsoleCP and GetConsoleCP?
{$ENDIF}
// File encoded as UTF8 without BOM
// The next line should print rose, wodka (Cyrillic) and ouzo (Greek)
//0xEF,0xBB,0xBF
UTF8TestString:= 'rosé, водка and ούζο';
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),@UTF8TestString[1],length(UTF8TestString),bw,nil);
{$IFDEF WINDOWS}
// reset console
SetConsoleCP(CurrentOutputCP);
{$ENDIF}
end.
ps. Make sure you set your consoles Font to Lucida Console.