Turkcell | Geleceği Yazanlar

Soru & Cevap

Android Webview Türkçe Karakter Sorunu

22.09.2013 - 01:15

Merhaba 

Local html sayfayi webview e yukluyorum ama tarayicida ve ios de sorun cikarmayan turkce karakterler android webview de gorunmuyor.

Cozum adina tavsiyeleriniz varmidir ?

10380 Görüntülenme

10 Cevap

Yasin Kafadar
25.09.2013 - 09:08

html koduna <div data-role="content" style="background-color:yellow; color:#FF0000">  ekleyip deneyince android 4.2.2'de bir sorun olmadı. Background beyaz gelir derken neyi kast ediyorsun?

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Metin
24.09.2013 - 16:34

webview.loadDataWithBaseURL("", html, "text/html", "utf-8", "");    //Background beyaz gelir

 

 

 

 

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Yasin Kafadar
23.09.2013 - 22:18

Tekrardan Selam Erhan,

Ben şöyle birşey denedim ve çalıştı.

Önce assetten html'in içeriğini okuyup bir string'de tutuyorum. Onu'da loadData ile yüklüyorum. Umarım işini görür. Emulator'den aldığım ekran görüntüsü ekte.

WebView ile ilgili hiçbir şey yapmadım. Direk senin kodları copy-paste yaptım :)

Kod:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView webView = (WebView) findViewById(R.id.webView1);
        webView.getSettings().setJavaScriptEnabled(true);

        // webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

        // webView.getSettings().setLoadsImagesAutomatically(true);

        // webView.getSettings().setMediaPlaybackRequiresUserGesture(false);

        webView.getSettings().setDefaultTextEncodingName("utf-8");
        
        String htmlContent = readAssets("index.html");
        webView.loadData(htmlContent, "text/html", "utf-8");
//        webView.loadUrl("file:///android_asset/index.html");
    }

    private String readAssets(String path){
        
        InputStream inputStream = null;
        Reader reader = null;
        try {
            inputStream = getAssets().open(path);
            reader = new InputStreamReader(inputStream, "UTF-8");
            
            StringBuffer buffer = new StringBuffer();
            char[] chrBuffer = new char[1024];
            
            int lengthOfReadBytes;
            while ((lengthOfReadBytes = reader.read(chrBuffer)) != -1) {
                buffer.append(chrBuffer, 0, lengthOfReadBytes);
            }
            
            return buffer.toString();
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    reader = null;
                }
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    inputStream = null;
                }
            }
        }
        
        return null;
    }


}

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Erhan Bayraktar
23.09.2013 - 13:23

<!DOCTYPE html> 
<html> 
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <title>Vefat İlanı, Ölüm İlanı, Teşekkür İlanı, Eleman İlanı, Emlak İlanı, Vasıta İlanı, Kayıp İlanı ve diğer tüm gazete ilanlarınızda hizmetinizdeyiz.</title> 
    <link rel="apple-touch-icon" href="assets/images/apple-touch-icon.png"/>
    <script>
        if (window.screen.height==568) { // iPhone 4"
        document.querySelector("meta[name=viewport]").content="width=320.1";
        }
    </script>
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    
    <!-- css -->
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" />
    <link rel="stylesheet" href="assets/css/style1.css">

    <!-- scripts -->
    <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
    <script src="assets/js/screen.js"></script> 
    
</head>
<body>


<div id="home-page" data-role="page">

    <!-- slider -->
    <script>
        jQuery(function(){
            jQuery('#camera_wrap').camera({    
                
            });
        });
    </script>
    <!-- /slider -->
    
    <!-- header -->

    <!--/header --> 
    

 
    <!-- main content -->
      <div data-role="content">    
    
    <!-- slider -->
    <div class="slider-outer">
        <div class="slider-container">
            <div id="camera_wrap">
            
            <div data-src="assets/images/demo/slides/1.jpg">
                <!-- <div class="camera_caption fadeFromBottom">
                    Touch Optimized Responsive Slider!
                </div> -->
            </div>
            
            <div data-src="assets/images/demo/slides/2.jpg">
                <!--<div class="camera_caption fadeFromBottom">
                     24 Effects, Optional Captions!
                </div>-->
            </div>
            
            <div data-src="assets/images/demo/slides/3.jpg">
                <!--<div class="camera_caption fadeFromBottom">
                     &laquo; Swipe With Your Finger &raquo;
                </div>-->
            </div>
            
            <div data-src="assets/images/demo/slides/4.jpg">
            </div>
            
             </div>
        </div>
        <br class="clear" />
    </div><!-- /slider -->  
    
    <div class="shadow1box">
        <img src="assets/images/shadow1.png" class="shadow1" alt="shadow">
    </div>
    
    <div class="content-padd">
  
      <hr class="ornamental"/>
          <h3 class="home-title">Fox Medya ve Reklamcılık Hizmetleri</h3>
    <hr class="ornamental"/>

        <!-- navigation -->
        <ul data-role="listview" data-inset="true" id="listview" style="margin-bottom:0px">
             
            <li><a href="hakkimizda.html">Hakkımızda</a></li>
            <li><a href="ilan_ornekleri.html" data-prefetch data-ajax="false">İlan Örnekleri</a></li>
            <li><a href="yetki_belgelerimiz.html" data-prefetch data-ajax="false">Yetki Belgelerimiz</a></li>
            <li><a href="iletisim.html" data-prefetch data-ajax="false">İletişim</a></li>
        </ul>
        
        <div class="shadow2box"><img src="assets/images/shadow2.png" class="shadow2" alt="shadow"></div>
        <!-- /navigation -->  

        
    </div><!-- /content padd -->
    </div><!-- /content -->    
    
    
    <!-- footer -->
    <div data-role="footer">
        <div data-role="navbar" class="custom-icons" data-grid="b" >
            <ul>
                <li><a href="ulasim.html" id="sign" data-icon="custom" data-theme="b">Harita</a></li>
                <li><a href="tel:02125022009" id="cell" data-icon="custom" data-theme="b">Bizi Arayın</a></li>
                <li><a href="mailto:info@foxmedya.com.tr?subject=[Mobil] İletişim" id="brush" data-icon="custom" data-theme="b" data-ajax="false">E-Mail</a></li>
            </ul>
        </div>
       
    </div>
    <!-- /footer -->
    
</div><!-- /page -->

 

<!-- add to homepage bubble on iphone, ipad  -->
<script type="text/javascript">
    if ('standalone' in navigator && !navigator.standalone && (/iphone|ipod|ipad/gi).test(navigator.platform) && (/Safari/i).test(navigator.appVersion)) {
        document.write('<link rel="stylesheet" href="assets\/add-bubble\/style\/add2home.css">');
        document.write('<script type="application\/javascript" src="assets\/add-bubble\/src\/add2home.js" charset="utf-8"><\/s' + 'cript>');
    }
</script>
<!-- /add to homepage bubble on iphone, ipad  --> 

</body>
</html>

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Erhan Bayraktar
23.09.2013 - 12:39

Tabiki gonderirim , size ulasabilecegim bir mail adresi almam gerekicek veya burada mesajlasma imkani var mi?

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Yasin Kafadar
23.09.2013 - 11:19

Selam Erhan,

Eğer içinde gizli bir bilgi yoksa index.html'i göndermen mümkün müdür? 

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Enes Şen
23.09.2013 - 11:04

Selam Erhan,

    Encodding problemi için kendimde çalışan bir örneği denedim.Ancak bir problem göremedim.
Tavsiyem yüklediğin html in head kısmına,yok ise "<meta http-equiv=Content-Type content="text/html; charset=UTF-8">" ifadesini eklemen. Birde aynı HTML i kaydederken de UTF-8 kaydedildiğinden emin olman.

Umarım işine yarar.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Erhan Bayraktar
23.09.2013 - 09:22

loadUrl ile yüklemeye calisiyorum , gayet basarili bi sekilde yukleniyor tum resourcelar .Anlayamadigim Ö harfi de hatasiz ekrana basiliyor ama İ ve ş harflerini goruntuleyemiyor.Html de charset url - 8 olarak set edilmis.Zaten html de sorun olmadigi iOS uygulamasinda  ayni html i yukleyince herhangi bi turkce karakter sorunu olmadigindan anlasilabiliyor.Kod su sekilde 

        webView = (WebView) findViewById(R.id.webview); 

        webView.getSettings().setJavaScriptEnabled(true);

        //webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

        //webView.getSettings().setLoadsImagesAutomatically(true);

        //webView.getSettings().setMediaPlaybackRequiresUserGesture(false);

        webView.getSettings().setDefaultTextEncodingName("utf-8");

        webView.loadUrl("file:///android_asset/index.html");

 

Son olarak turkce karakter sorunu disinda javascript slider image larini gostermiyor android uygulamasi , yine iOS de herhangi bir sorun olmamasina ragmen.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Mehmet Altıparmak
22.09.2013 - 12:57

sonradan biraz kurcalayınca bug konusunda emin olamadım. loadUrl ile mi yüklemeye çalışıyorsun html dosyayı? Html içerisinde belirttiğin encoding ile dosya encoding i birbiri ile örtüşüyor mu?

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Mehmet Altıparmak
22.09.2013 - 11:16

Merhaba Erhan,

loadData fonksiyonunda bug vardı diye hatırlıyorum. Aşağıdaki linkte bir tartışma var.

http://code.google.com/p/android/issues/detail?id=3552

alternatif olarak yüklemek istediğin html bir dosyaya yazarak dosyayı loadUrl fonksiyonu ile yükleyebilirsin.

Ornek olarak assets altındaki bir dosyayı yüklemek için:

webView.loadUrl("file:///android_asset/htmlsayfasi.htm");

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.