<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Функция замены диакритических знаков схожими латинскими знаками]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=12594&amp;type=atom" />
	<updated>2017-05-04T23:32:59Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=12594</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Функция замены диакритических знаков схожими латинскими знаками]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=115671#p115671" />
			<content type="html"><![CDATA[<p>Всего таких знаков 221 среди основных в диапазоне кодов 192..609:</p><div class="quotebox"><blockquote><p>À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý à á â ã ä å æ ç è é ê ë ì í î ï ñ ò ó ô õ ö ø ù ú û ü ý ÿ Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı Ĵ ĵ Ķ ķ Ĺ ĺ Ļ ļ Ľ ľ Ł ł Ń ń Ņ ņ Ň ň Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž ƀ Ɖ Ƒ ƒ Ɨ ƚ Ɵ Ơ ơ ƫ Ʈ Ư ư ƶ Ǎ ǎ Ǐ ǐ Ǒ ǒ Ǔ ǔ Ǖ ǖ Ǘ ǘ Ǚ ǚ Ǜ ǜ Ǟ ǟ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ ǰ ɡ</p></blockquote></div><p>Можно расширить строки s1 и s2 в представленной выше функции, а я в свое время использовал следующий код:<br /></p><div class="codebox"><pre><code>
Option Explicit

Dim oDiaDict

&#039; Инициализация словаря единократно при запуске
Set oDiaDict = GetDiaDict()

&#039; Проверка
MsgBox Replace_Diacritics(&quot;ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝàáâãäåæçèéêëìíîïñòóôõöøùúûüýÿĀāĂăĄąĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıĴĵĶķĹĺĻļĽľŁłŃńŅņŇňŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžƀƉƑƒƗƚƟƠơƫƮƯưƶǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǞǟǤǥǦǧǨǩǪǫǬǭǰɡ&quot;, oDiaDict)

Function Replace_Diacritics(sText, oDict)
	
	Dim i, sChar, aRes
	
	aRes = Array()
	ReDim aRes(Len(sText))
	For i = 1 To Len(sText)
		sChar = Mid(sText, i, 1)
		If oDict.Exists(sChar) Then
			aRes(i) = oDict(sChar)
		Else
			aRes(i) = sChar
		End If
	Next
	Replace_Diacritics = Join(aRes, &quot;&quot;)
	
End Function
	
Function GetDiaDict()
	
	Dim oDict, i, sRange, sCured, sChar
	
	Set oDict = CreateObject(&quot;Scripting.Dictionary&quot;)
	sRange = &quot;&quot;
	For i = 192 To 609
		sRange = sRange &amp; ChrW(i)
	Next
	With CreateObject(&quot;ADODB.Stream&quot;)
		.Type = 2
		.Mode = 3
		.Open
		.Charset = &quot;ascii&quot;
		.WriteText sRange
		.Position = 0
		sCured = .ReadText
		.Close
	End With
	For i = 192 To 609
		sChar = Mid(sCured, i - 191, 1)
		If sChar &lt;&gt; &quot;?&quot; Then oDict(ChrW(i)) = sChar
	Next
	Set GetDiaDict = oDict
	
End Function</code></pre></div>]]></content>
			<author>
				<name><![CDATA[omegastripes]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29228</uri>
			</author>
			<updated>2017-05-04T23:32:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=115671#p115671</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Функция замены диакритических знаков схожими латинскими знаками]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114698#p114698" />
			<content type="html"><![CDATA[<p>Спасибо.</p>]]></content>
			<author>
				<name><![CDATA[929151]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29475</uri>
			</author>
			<updated>2017-04-06T14:58:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114698#p114698</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Функция замены диакритических знаков схожими латинскими знаками]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114692#p114692" />
			<content type="html"><![CDATA[<p>Сохранил код в UTF-16, запустил, на выходе только A. В коде проблем не вижу.</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2017-04-06T14:45:05Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114692#p114692</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: Функция замены диакритических знаков схожими латинскими знаками]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=114691#p114691" />
			<content type="html"><![CDATA[<p>Нашёл функцию замены, но результат работы совсем не устраивает.<br /></p><div class="codebox"><pre><code>
Option Explicit
Function EliminarAcentos(text)
    Dim i, s1, s2
    s1 = &quot;ÁÀÉÈÍÏÓÒÚÜáàèéíïóòúüñçâ&quot;
    s2 = &quot;AAEEIIOOUUaaeeiioouunca&quot;
    If Len(text) &lt;&gt; 0 Then
        For i = 1 To Len(s1)
            text = Replace(text, Mid(s1,i,1), Mid(s2,i,1))
        Next
    End If
    EliminarAcentos = text
End Function

WScript.Echo EliminarAcentos(&quot;Á&quot;)</code></pre></div><p>В итоге на выходе получаю двойное &quot;AA&quot;, а нужно одно А.</p>]]></content>
			<author>
				<name><![CDATA[929151]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29475</uri>
			</author>
			<updated>2017-04-06T14:38:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=114691#p114691</id>
		</entry>
</feed>
