čeština ze starší verze VB   zodpovězená otázka

C#

Zdravím, převedl jsem projekt VB net z verze 2012 na 2015. Po přegenerování projektu mi to rozhází češtinu, přesneji pouze písmena s háčky, čárky jsou OK. V navrhovém prostředí je čeština v pořádku, pouze po spuštění jsou písmena s háčky nahrazena různymi paznaky. Nevíte kde co nastavit či změnit. Díky H.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Velice pravděpodobně může jít o tento problém:

https://connect.microsoft.com/VisualStud...

Možná řešení:

- Do všech projektů přidat <CodePage>1250</CodePage>

- Spouštět MSBuild s parametrem /p:CodePage=1250

- environment variable: SET CodePage=1250

- zkonvertovat všechny zdrojáky na UTF8

Test zda je zdrojovy soubor v ASCII se da udelat takto:

public static Encoding GetEncoding(string filename)
{
    // Read the BOM
    var bom = new byte[4];
    using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read))
    {
        file.Read(bom, 0, 4);
    }

    // Analyze the BOM
    if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) return Encoding.UTF7;
    if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) return Encoding.UTF8;
    if (bom[0] == 0xff && bom[1] == 0xfe) return Encoding.Unicode; //UTF-16LE
    if (bom[0] == 0xfe && bom[1] == 0xff) return Encoding.BigEndianUnicode; //UTF-16BE
    if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return Encoding.UTF32;
    return Encoding.ASCII;
}

Jednoduchym scriptem treba v linqpadu pak projit vsechny zdrojove soubory, zjistit zda jsou v ASCII a pokud ano tak nacit a opet ulozit jako utf-8

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji, částečně to pomohlo. Pokud form uložím pod kodováním UTF-8, některé položky se již zobrazuje dobře. Přesto některá pole label či názvy sloupců v datagridview, některé položky menu jsou stéle rozhozené.

Omylem jsem příspěvek zařadil pod c#, mám to ve Visual Basicu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste projet scriptem všechny soubory se zdrojáky. to že je to ve VB nehraje roli. Dělat to ručně bude strašná otročina.

Script pro LinqPad:

void Main()
{
	foreach(var f in Directory.GetFiles(@"PATH TO SLN DIRECTORY", "*.vb",SearchOption.AllDirectories))
	{
		Encoding enc = GetEncoding(f);
		
		Console.WriteLine("{1} - {0}",f , enc);
		
		if (enc == Encoding.ASCII)
		{
			Console.WriteLine("Converting to UTF-8");
			
			string fileContent = File.ReadAllText(f, Encoding.GetEncoding(1250));			
			File.WriteAllText(f, fileContent, Encoding.UTF8);					
		}
	}
}

public static Encoding GetEncoding(string filename)
{
    // Read the BOM
    var bom = new byte[4];
    using (var file = new FileStream(filename, FileMode.Open, FileAccess.Read))
    {
        file.Read(bom, 0, 4);
    }

    // Analyze the BOM
    if (bom[0] == 0x2b && bom[1] == 0x2f && bom[2] == 0x76) return Encoding.UTF7;
    if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf) return Encoding.UTF8;
    if (bom[0] == 0xff && bom[1] == 0xfe) return Encoding.Unicode; //UTF-16LE
    if (bom[0] == 0xfe && bom[1] == 0xff) return Encoding.BigEndianUnicode; //UTF-16BE
    if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff) return Encoding.UTF32;
    return Encoding.ASCII;
}

Bacha, přepisuje to původní soubory :-)
nahlásit spamnahlásit spam 0 odpovědětodpovědět

MOC děkuji, čeština je všude OK.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback